Django base.html中的动态变量

C. *_*ppa 4 authentication django orm

我有一个使用flatpages和其他不带request对象的构造的应用程序.这会导致base.html出现问题.这是一个简单的例子.

如果我想要"欢迎{{request.user.username}}之类的话!" 在每个页面的顶部,实现这一目标的最佳方法是什么?

maz*_*ife 5

的flatpages使用RequestContext渲染模板.这里有一些关于RequestContext的信息.可以说,您应该能够编写一个Context Processor来将request.user添加到每个模板的上下文中.像这样的东西:

def user(request):
    """A context processor that adds the user to template context"""
    return {
        'user': request.user
    }
Run Code Online (Sandbox Code Playgroud)

然后,您将TEMPLATE_CONTEXT_PROCESSORS在settings.py中添加到现有内容中:

TEMPLATE_CONTEXT_PROCESSORS = TEMPLATE_CONTEXT_PROCESSORS + (
    'context_processors.user',
)
Run Code Online (Sandbox Code Playgroud)

您只需要确保所有视图都绑定RequestContext到他们的模板:

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

这是对Context Processors 的一个很好的阅读.它们是一个非常有用的功能.

  • 您不需要编写上下文处理器来添加`user`,默认情况下内置并包含一个:`django.core.context_processors.auth` (4认同)