在模板Django中获取Site_ID

时间:2010-12-21 17:12:11

标签: python django

我为拥有多个应用程序的客户构建了一个网站。现在他有一个新的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个模型。我不能重新创建模型,并且乱七八糟。这需要快速解决。

提前致谢

3 个答案:

答案 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。