8

这应该是一个超级简单的。我很确定我过去在我的模板中成功地使用了这个上下文来进行链接。我的信念是,它以某种方式内置于 RequestContext 实例中。

我的设置文件中的 SITE_ID 记录是正确的。我已经为我的所有视图包含了一个 RequestContext 实例,并且我已经包含了 contrib.auth 应用程序,这在这种情况下可能是相关的。

{{site}} 上下文是否以某种方式内置或者我应该查询 Sites 对象的实例?

谢谢大家,布伦丹

4

2 回答 2

24

Django 力求明确,因此它不太可能自行设置任何上下文。必须有上下文处理器设置{{site}}settings.CONTEXT_PROCESSORS. 我已经检查过了django.core.context_processorsdjango.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']
于 2011-02-23T18:29:53.893 回答
2

创建自定义上下文处理器不会有什么坏处

def site(request):
    return {'site': Site.objects.get_current()}

请注意,get_current() 使用 SITE_ID,它是项目中的全局设置(在 settings.py 中定义)。如果要支持多站点,则需要 SITE_ID 变量根据当前访问的站点更改其值。

是一个很好的片段,可以让它工作。

于 2011-02-23T18:51:19.040 回答