如何有条件地为现有网站设置皮肤(用于合作伙伴品牌)

时间:2009-09-28 13:58:28

标签: django django-templates

我有一个现有的Django网站,其中使用了大量的模板。我们已经同意提供我们网站的定制皮肤版本供我们的合作伙伴使用,他们希望视觉设计与他们自己的网站协调一致。这将使用我们主网站上的功能和数据的子集,在一个单独的URL(我们可以确定)上。

所以我的问题是:在不重复大量代码或模板的情况下,为我的网站添加reskin功能的最佳方法是什么?

正如我所看到的,有几个组件需要协同工作:

  • 网址:需要有一组不同的网址,这些网址指向网站的合作伙伴品牌版本,但可以包含网站构建网页所需的所有标准路径信息。

  • 模板'扩展':需要让模板扩展到不同的基础,例如{%extends'acner.html'%}而不是{%extends'base.html'%}

  • 查看逻辑:当这是合作伙伴品牌版本时,需要让视图知道,以便他们可以适当地更改业务逻辑

到目前为止,我的想法是将合作伙伴网站放在子域中,然后使用中间件解析域名并将“partner”和“partner_template”变量添加到请求对象中。因此,我可以访问我的视图中的request.partner,以处理业务逻辑。然后,我必须编辑所有模板,如下所示:

{% extends request.partner_template|default:'base.html' %}

(根据this answer,'extends'就像任何其他模板标签一样采用变量。)

这会正常吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您对不同的网站使用不同的settings.py,则可以 指定不同的模板加载目录。 (这可能默认为您的无页面页面。)

就个人而言,我不相信在同一个视图代码中使用不同的业务逻辑,这对我来说就像是一个黑客 - 就像广泛的条件编译在C中一样。

总结一下。

  1. 使用django.contrib.sites和不同的settings.py
  2. 明确一点,这是一个使用相同数据的新应用/网站,或者只是不同的css /模板。