【问题标题】:Is it possible automatically include user to all templates?是否可以自动将用户包含到所有模板中?
【发布时间】:2011-05-04 12:24:45
【问题描述】:

我在 Django 1.3 中有项目。为了在所有页面中显示用户名,我在 base.html 中使用了这样的标签

{% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}.  
    <a href="/proc/accounts/logout/">loggout</a></p>
{% else %}
    <a href="/proc/accounts/login/">loggin</a>
{% endif %}

但如果我不从模板中用户的视图返回context_instance=RequestContext(request),则模板中的值为空。 'django.contrib.auth.context_processors.auth' 包含在 TEMPLATE_CONTEXT_PROCESSORS 中。

是否可以自动将用户包含到所有模板中?

【问题讨论】:

    标签: django django-templates django-context


    【解决方案1】:

    从 Django 1.3 开始。使用 shortcuts.render 函数,不要担心 requestcontext 包括你的视图

    【讨论】:

      【解决方案2】:

      你自己已经给出了答案。只要您使用 RequestContext,它就会被包含在所有模板中。

      如果你真的觉得工作量太大,你可以使用(1.3 中的新功能)TemplateResponse class

      【讨论】:

        【解决方案3】:

        或者简单地创建一个上下文处理器。看 http://docs.djangoproject.com/en/dev/ref/templates/api/#writing-your-own-context-processors

        把它放在 context_processor.py 中

        def root_categories(request):
            return {
                'user': request.user,
            }
        

        在 settings.py 中添加上下文处理器。

        现在在您的模板中尝试:{{ user }}

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-06
          • 2011-01-26
          相关资源
          最近更新 更多