2011-09-19 65 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() } 

希望它幫助

相關問題