【问题标题】:Django {{site}} template context not working?Django {{site}} 模板上下文不起作用?
【发布时间】:2011-07-02 22:45:20
【问题描述】:

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

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

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

谢谢大家, 布伦丹

【问题讨论】:

    标签: django django-templates django-context


    【解决方案1】:

    Django 力求明确,因此它不太可能自行设置任何上下文。必须有上下文处理器在settings.CONTEXT_PROCESSORS 中设置{{site}}。我检查了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']
    

    【讨论】:

    • 感谢 Skimantas,这绝对回答了我的问题。我没有使用任何第三方上下文处理器,所以之前使用站点的能力仍然是个谜。我要调查一下。不过,很好地回答了我的整体问题。
    【解决方案2】:

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

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

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

    Here 是一个不错的 sn-p,可以让它工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2022-06-10
      • 2023-03-16
      • 2022-01-05
      • 1970-01-01
      • 2012-01-31
      • 2021-07-26
      相关资源
      最近更新 更多