2011-09-19 97 views

回答

25

问题的标题假设“视图”和“模板”是可以互换的 - 它们不是。为了在模板中获取当前网站,需要将其添加到用于呈现模板的上下文中。如果您使用的是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> 
+0

我使用'django.views.generic.simple.direct_to_template',所以我应该被覆盖,对不对?这没有内置的上下文处理器? –

+0

是的,'direct_to_template'使用'RequestContext',但是您需要编写自己的上下文处理器,因为Django中没有一个。或者,您可以将参数传递给'direct_to_template',将当前网站添加到上下文。 –

+0

为什么名为'site_processor'而不是'site'的函数? –

0

古怪,使用bradleyayers处理器给了Null结果,所以不是使用Site框架,而是使用请求中的参数。

所以处理器将看起来像:

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

希望它帮助

相关问题