2010-12-21 88 views
1

我已經爲包含多個應用程序的客戶端構建了一個Web站點。現在他有一個新的URL,他希望指向同一個網站,但他希望外觀和感覺有所改變。這基本上是他想要一個新的home.html和base.html爲新的網站。我可以輕鬆地將新網站添加到設置,然後更改主頁的視圖,以顯示新的home2.html。在模板中獲取Site_ID Django

但是我怎麼做這樣的事情在base.html文件

{% if site_id equals 1 %} 

{% include "base1.html" %} 

{% endif %} 

{% if site_id equals 2 %} 

{% include "base2.html" %} 
{% endif %} 

任何想法在僞代碼表示。網站上有100多個視圖和近50個模型。我無法重新創建模型,並且亂七八糟。這需要一個快速解決方案。

在此先感謝

回答

1

您可以創建一個上下文處理器自動添加site_id上下文:http://docs.djangoproject.com/en/dev/ref/templates/api/#writing-your-own-context-processors

但我會選擇不同的解決方案。您可以簡單地爲每個站點添加一個額外的模板目錄,以便Django會首先嚐試專門針對該站點的模板,如果它們不可用,則回退到常規模板。

+0

是不是創建一個上下文處理器矯枉過正?不會在視圖中添加更簡單? – 2010-12-21 18:17:41

1

爲了擴展WoLph與上下文處理器的想法,我甚至可能會將模板切換添加到上下文處理器中,以清理模板,否則您可能需要經常重複if子句:

from django.contrib.sites.models import Site 

def base_template(request): 
    site = Site.objects.get_current() 
    template = "base%s.html" % str(site.pk) 
    return {'BASE_TEMPLATE': template} 

而且在你的模板:{% include BASE_TEMPLATE %}

看起來更好對我來說比在模板中切換!

0

另一種解決方案是編寫一箇中間件來設置「quiz.site」當前的站點ID。