当前站点是不是可以通过模板访问?
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 的站点吗?