【问题标题】:alternative to {% if request.user.is_active %} in Django Templates在 Django 模板中替代 {% if request.user.is_active %}
【发布时间】:2012-10-10 16:34:01
【问题描述】:

关于以下的逻辑选择是什么:

{% if request.user.is_active %}

如果视图没有返回带有request 的字典的render_to_response,则模板无法正常工作。

所以,欢迎任何想法。

//已编辑

我的动机是:当您使用已安装应用程序的视图时,您没有机会修改它们。

【问题讨论】:

    标签: python django authentication django-templates render-to-response


    【解决方案1】:

    在您的settings.py 中将django.contrib.auth.context_processors.auth 添加到TEMPLATE_CONTEXT_PROCESSORS

    现在您的所有模板中都有 user 变量。所以你可以使用这个:

    {% if user.is_active %}
    

    在文档中查看更多信息:template context processors in settingsauth context processor

    【讨论】:

    • auth 默认包含,也可以使用request 默认不包含的上下文处理器。此外,最好注意使用RequestContext
    【解决方案2】:

    view.py:

    def foo_view(request):
        ...
        is_active = request.user.is_active
        return render_to_response('template.html', {'is_active':is_active})
    

    或上下文处理器:

    def is_user_active(request):
        return {'is_active': request.user.is_active}
    

    或中间件:

    class IsUserActive:
        def process_template_response(self, request, response):
            response.context['is_active'] = request.user.is_active
    

    模板.html:

    {% if is_active %}
        ...
    {% endif %}
    

    但是说真的,我不知道为什么 render_to_response 不能满足你:

    ...
    return render_to_response('template.html', 
        context_instance=RequestContext(request))
    

    【讨论】:

    • 当您从已安装的应用程序中使用一些您无法修改的视图时。例如:userena 应用程序、登录、注销视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多