【发布时间】:2011-11-19 23:14:56
【问题描述】:
我试图从模板中简单地获取当前的Site 以进行解析,如下所示:
<h3>{{ site.name }}</h3>
不幸的是,这并没有带来任何问题。
有没有办法从模板访问当前站点?
【问题讨论】:
标签: django django-templates django-views django-sites
我试图从模板中简单地获取当前的Site 以进行解析,如下所示:
<h3>{{ site.name }}</h3>
不幸的是,这并没有带来任何问题。
有没有办法从模板访问当前站点?
【问题讨论】:
标签: django django-templates django-views django-sites
您的问题的标题假定“视图”和“模板”是可以互换的——它们不是。为了在模板中获取当前站点,需要将其添加到用于呈现模板的上下文中。如果您使用的是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?
dict,并且在呈现上下文时字典中的键将作为变量可用。因此,您可以将 site 键更改为其他值,或者将其他键/值对添加到字典并在模板中访问它们。
奇怪的是,使用 bradleyayers 处理器会得到 Null 结果,因此我没有使用 Site 框架,而是使用了请求中的参数。
所以处理器看起来像这样:
def host_processor(request):
return { 'host': request.get_host() }
希望对你有帮助
【讨论】: