当前站点是不是可以通过模板访问?

Posted

技术标签:

【中文标题】当前站点是不是可以通过模板访问?【英文标题】:Is the current Site accessible from a template?当前站点是否可以通过模板访问? 【发布时间】:2011-11-19 23:14:56 【问题描述】:

我试图从模板中简单地获取当前的Site 以进行解析,如下所示:

<h3> site.name </h3>

不幸的是,这并没有带来任何问题。

有没有办法从模板访问当前站点?

【问题讨论】:

【参考方案1】:

您的问题的标题假定“视图”和“模板”是可以互换的——它们不是。为了在模板中获取当前站点,需要将其添加到用于呈现模板的上下文中。如果您使用的是RequestContext,您可以编写一个上下文处理器来自动执行此操作。

您可以编写一个上下文处理器来执行此操作:

from django.contrib.sites.models import Site

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

然后,将其添加到您的TEMPLATE_CONTEXT_PROCESSORS,并像这样使用它:

<h3> site.name </h3>

【讨论】:

我正在使用django.views.generic.simple.direct_to_template,所以我应该被覆盖,对吧?没有内置的上下文处理器吗? 是的,direct_to_template 使用 RequestContext,但是您需要编写自己的上下文处理器,因为 Django 中没有。或者,您可以将参数传递给direct_to_template,将当前站点添加到上下文中。 为什么函数命名为site_processor而不是site @ChrisJohnson:函数是context processor,这就是函数名称的含义。它返回一个dict,并且在呈现上下文时字典中的键将作为变量可用。因此,您可以将 site 键更改为其他值,或者将其他键/值对添加到字典并在模板中访问它们。 仍然是将此提供给模板的最佳答案,但值得注意的是 1.8 中更改的设置位置:docs.djangoproject.com/en/1.9/ref/templates/upgrading/…【参考方案2】:

奇怪的是,使用 bradleyayers 处理器会得到 Null 结果,因此我没有使用 Site 框架,而是使用了请求中的参数。

所以处理器看起来像这样:

def host_processor(request):
    return  'host': request.get_host() 

希望对你有帮助

【讨论】:

以上是关于当前站点是不是可以通过模板访问?的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中,是不是可以从包含标记内的父模板上下文访问当前用户会话?

可以通过文件夹而不是端口访问多个基于 laravel 的站点吗?

通过 Internet 访问 XAMPP 中的多个站点(不是 Localhost)

Django 全球 base.html 模板

cookie详解

如何在模板标签中获取当前用户?