在Django模板中获取Site_ID
我为一个客户建立了一个网站,里面有很多应用程序。现在他注册了一个新的网址,想把这个网址指向同一个网站,但希望网站的外观和感觉有所不同。简单来说,他想要一个新的 home.html 和 base.html 来为新网站服务。我可以很容易地在设置中添加这个新网站,然后更改主页的视图,显示一个新的 home2.html。
但是,我该如何在 base.html 中实现类似下面伪代码的功能呢?
{% if site_id equals 1 %}
{% include "base1.html" %}
{% endif %}
{% if site_id equals 2 %}
{% include "base2.html" %}
{% endif %}
有没有什么想法?网站上有成百上千的视图,还有将近50个模型。我不能重新创建模型,也不想搞得一团糟。这需要一个快速的解决方案。
提前谢谢你!
3 个回答
0
另一种解决办法是写一个中间件,用来设置 ´request.site´ 为当前网站的ID。
1
你可以创建一个上下文处理器,自动将 site_id
加入到上下文中:http://docs.djangoproject.com/en/dev/ref/templates/api/#writing-your-own-context-processors
不过我更倾向于另一种解决方案。你可以为每个网站添加一个额外的模板目录,这样Django会优先尝试使用该网站专用的模板,如果找不到再使用普通模板。
1
为了进一步扩展WoLph的想法,我可能会把模板切换的功能也放到上下文处理器里,这样可以让你的模板更整洁。否则,你可能会经常需要重复写一些判断条件:
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 %}
这样看起来比在模板里进行切换要好看多了!