base.html
用作所有其他页面的基本模板.base.html
有导航栏,在导航栏中,我想显示用户收到的消息数.因此,我需要一个变量,比如base.html
中的{{number_of_messages}}
.
但是,我应该如何将此变量传递给它呢?每个模板扩展base.html
个,并由一个函数呈现.我不认为在所有函数中都返回number_of_messages
是一个好方法.有没有更好的方法来实现这一点?如何将此变量传递给所有模板?
base.html
用作所有其他页面的基本模板.base.html
有导航栏,在导航栏中,我想显示用户收到的消息数.因此,我需要一个变量,比如base.html
中的{{number_of_messages}}
.
但是,我应该如何将此变量传递给它呢?每个模板扩展base.html
个,并由一个函数呈现.我不认为在所有函数中都返回number_of_messages
是一个好方法.有没有更好的方法来实现这一点?如何将此变量传递给所有模板?
Have a look at:
https://docs.djangoproject.com/en/dev/ref/templates/api/#django.template.RequestContext
只要:
render
快捷键(否则请注意使用RequestContext
来呈现响应)TEMPLATE_CONTEXT_PROCESSORS
设置中有django.contrib.auth.context_processors.auth
(as it is by default) .那么您的模板中有当前请求的User
(或AnonymousUser
)个实例作为{{ user }}
可用…我猜您可以从那里直接访问消息的数量?
或者你用的是Django的messages framework?
它带有自己的上下文处理器(只要您使用render
或RequestContext
),它将在您的模板中提供{{ messages }}
var(包含当前用户的消息).对于"消息数量",您可以 Select {{ messages|length }}
条
如果这些内置选项都不能满足您的需求,您可以:
make your own template context processor,它将 for each 请求运行,并为all模板提供额外的变量(当使用RequestContext
呈现时)
make your own template tag,只能在需要的地方使用.当然,如果这是在base.html
中使用的,并且所有模板都继承自base.html
,那么它仍然会在每个页面上运行.