Django {{site}}模板上下文不起作用?

时间:2011-02-23 17:33:40

标签: django django-templates django-context

这应该是一个非常简单的。我很确定我以前在我的模板中成功使用了这个上下文来进行链接。我的信念是,这是以某种方式或其他方式构建到RequestContext实例中的。

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

{{site}}上下文是以某种方式构建的,还是应该查询该实例的Sites对象?

谢谢大家, 布伦丹

2 个答案:

答案 0 :(得分: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']

答案 1 :(得分:2)

创建自定义上下文处理器不会受到伤害

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

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

Here是一个不错的代码段,可以让它发挥作用。