这应该是一个非常简单的。我很确定我以前在我的模板中成功使用了这个上下文来进行链接。我的信念是,这是以某种方式或其他方式构建到RequestContext实例中的。
我的设置文件中的SITE_ID记录是正确的。我为我的所有视图都包含了一个RequestContext实例,并且我已经包含了contrib.auth应用程序,在这种情况下可能是相关的。
{{site}}上下文是以某种方式构建的,还是应该查询该实例的Sites对象?
谢谢大家, 布伦丹
答案 0 :(得分:24)
Django努力做到明确,因此它不太可能通过它自己设置任何上下文。必须有上下文处理器在{{site}}
中设置settings.CONTEXT_PROCESSORS
。我已经检查了django.core.context_processors
和django.contrib.sites
,并且没有设置site
的处理器。所以你可能有第三方上下文处理器就可以做到这一点。
编写上下文处理器非常容易:
myproject/context_processors.py:
from django.contrib.sites.models import Site
def site(request):
return {
'site': Site.objects.get_current()
}
myproject/settings.py:
CONTEXT_PROCESSORS += ['myproject.context_processors.site']
答案 1 :(得分:2)
创建自定义上下文处理器不会受到伤害
def site(request):
return {'site': Site.objects.get_current()}
请注意,get_current()使用SITE_ID,它是项目中的全局设置(在settings.py中定义)。如果要支持多站点,则需要SITE_ID变量来根据所访问的当前站点更改其值。
Here是一个不错的代码段,可以让它发挥作用。