这应该是一个超级简单的。我很确定我过去在我的模板中成功地使用了这个上下文来进行链接。我的信念是,它以某种方式内置于 RequestContext 实例中。
我的设置文件中的 SITE_ID 记录是正确的。我已经为我的所有视图包含了一个 RequestContext 实例,并且我已经包含了 contrib.auth 应用程序,这在这种情况下可能是相关的。
{{site}} 上下文是否以某种方式内置或者我应该查询 Sites 对象的实例?
谢谢大家,布伦丹
这应该是一个超级简单的。我很确定我过去在我的模板中成功地使用了这个上下文来进行链接。我的信念是,它以某种方式内置于 RequestContext 实例中。
我的设置文件中的 SITE_ID 记录是正确的。我已经为我的所有视图包含了一个 RequestContext 实例,并且我已经包含了 contrib.auth 应用程序,这在这种情况下可能是相关的。
{{site}} 上下文是否以某种方式内置或者我应该查询 Sites 对象的实例?
谢谢大家,布伦丹
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']
创建自定义上下文处理器不会有什么坏处
def site(request):
return {'site': Site.objects.get_current()}
请注意,get_current() 使用 SITE_ID,它是项目中的全局设置(在 settings.py 中定义)。如果要支持多站点,则需要 SITE_ID 变量根据当前访问的站点更改其值。
这是一个很好的片段,可以让它工作。