Django模板中{%if request.user.is_active%}的替代方法

cle*_*ula 1 python authentication django django-templates render-to-response

有哪些逻辑选择:

{% if request.user.is_active %}
Run Code Online (Sandbox Code Playgroud)

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

所以,欢迎任何想法.

//编辑

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

Ser*_*ney 5

view.py:

def foo_view(request):
    ...
    is_active = request.user.is_active
    return render_to_response('template.html', {'is_active':is_active})
Run Code Online (Sandbox Code Playgroud)

或context_processor:

def is_user_active(request):
    return {'is_active': request.user.is_active}
Run Code Online (Sandbox Code Playgroud)

或中间件:

class IsUserActive:
    def process_template_response(self, request, response):
        response.context['is_active'] = request.user.is_active
Run Code Online (Sandbox Code Playgroud)

template.html:

{% if is_active %}
    ...
{% endif %}
Run Code Online (Sandbox Code Playgroud)

但真诚地,我不知道为什么render_to_response不能满足你:

...
return render_to_response('template.html', 
    context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)


def*_*fuz 5

添加django.contrib.auth.context_processors.authTEMPLATE_CONTEXT_PROCESSORS您的settings.py.

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

{% if user.is_active %}
Run Code Online (Sandbox Code Playgroud)

请参阅docs中的更多内容:设置中的模板上下文处理器,auth上下文处理器.