【问题标题】:How get current user in a template tag?如何在模板标签中获取当前用户?
【发布时间】:2013-01-26 17:15:20
【问题描述】:

如何在 django 模板标签中获取当前用户? (请求对象不可访问) 或者我如何访问请求对象?

【问题讨论】:

  • 您可以将其创建为上下文处理器,而不是创建模板标签并始终在模板中调用它。在上下文处理器中,您无需始终在模板中调用函数即可获取用户。
  • 单行模板标签真的很复杂.. django 真的这么笨拙吗?
  • 或者试着把这个放到你的模板{{user.username}}
  • 那你想展示什么?如果它没有用,那么你的问题是不完整的。如果您真的想要帮助,请更具体并提供示例。
  • 问题很清楚,他想在一个模板标签中访问当前用户

标签: django django-templates


【解决方案1】:

假设您有每个注册用户的个人资料页面,并且您只想向个人资料页面的所有者显示编辑链接(即,如果当前用户正在访问他/她的个人资料页面,用户可以看到编辑按钮,但用户在其他用户的个人资料页面上看不到编辑按钮。 在您的 html 文件中:

<h2>Profile of {{ object.username }}</h2>
{% if object.username == user.username %}
    <a href="{% url 'profile_update' object.pk %}">Edit</a>
{% endif %}

那么你的 urls.py 文件应该包含:

from django.urls import path
from .views import ProfileUpdateView
urlpatterns = [
    ...
    path('<int:pk>/profile/update', ProfileUpdateView.as_view(), name = 'profile_update'),
    ...
]

考虑到您有合适的ProfileUpdateView 和合适的型号

【讨论】:

    【解决方案2】:

    这个问题已经answered here:

    {% if user.is_authenticated %}
        <p> Welcome '{{ user.username }}'</p>
    {% else %}
        <a href="{% url django.contrib.auth.login %}">Login</a>
    {% endif %}
    

    并确保在 settings.py 中安装了请求模板上下文处理器:

    TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.core.context_processors.request',
    ...
    )
    

    注意:

    • 在视图中使用request.user.get_username(),在视图中使用user.get_username 模板。优先于直接引用用户名属性。 Source
    • 如果使用 RequestContext,则此模板上下文变量可用。
    • django.contrib.auth.context_processors.auth 默认启用并包含变量 user
    • 您不需要启用 django.core.context_processors.request 模板上下文处理器。

    来源:https://docs.djangoproject.com/en/dev/topics/auth/default/#authentication-data-in-templates

    【讨论】:

      【解决方案3】:

      用户始终附加到请求中,在您的模板中您可以执行以下操作:

      {% if user.is_authenticated %}
      {% endif %}
      

      您不必指定“请求”来访问其内容

      更新:

      注意:is_authenticated() 始终为登录用户(User 对象)返回 True,但为 AnonymousUser(访客用户)返回 False。在这里阅读:https://docs.djangoproject.com/en/1.7/ref/contrib/auth/

      【讨论】:

      • user.is_authenticated 总是返回 true 所以它基本上没用。
      • 不!它总是为用户(记录的)返回真,但为匿名用户返回假,所以不是没用的!仔细阅读这里:docs.djangoproject.com/en/1.7/ref/contrib/auth
      【解决方案4】:

      如果要在模板标签中访问当前用户,则必须将其作为参数传递给模板,如下所示:

      {% my_template_tag user %}
      

      然后确保您的模板标签接受这个额外的参数。查看有关此主题的 documentation。您还应该查看simple tags

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-04
        • 2011-02-22
        • 1970-01-01
        • 1970-01-01
        • 2020-06-04
        相关资源
        最近更新 更多