我为拥有多个应用程序的客户构建了一个网站。现在他有一个新的URL注册,他想指向同一个网站,但他想要改变外观。这基本上他想要一个新的home.html和base.html用于新的网站。我可以轻松地将新网站添加到设置中,然后更改主页的视图,以显示新的home2.html。
但是,我如何做这样的事情,如在base.html的psuedo代码中表达的那样
{% if site_id equals 1 %}
{% include "base1.html" %}
{% endif %}
{% if site_id equals 2 %}
{% include "base2.html" %}
{% endif %}
任何想法。该网站有100多个视图和近50个模型。我不能重新创建模型,并且乱七八糟。这需要快速解决。
提前致谢
答案 0 :(得分:1)
您可以创建一个上下文处理器,以自动将site_id
添加到上下文中:http://docs.djangoproject.com/en/dev/ref/templates/api/#writing-your-own-context-processors
但我会选择不同的解决方案。你可以简单地为每个站点添加一个额外的模板目录,这样Django将首先专门为该站点尝试模板,如果它们不可用则回退到普通模板。
答案 1 :(得分: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 %}
看起来比模板中的切换更好!
答案 2 :(得分:0)
另一个解决方案是编写一个中间件来将'request.site'设置为当前站点ID。