我有一个现有的Django网站,其中使用了大量的模板。我们已经同意提供我们网站的定制皮肤版本供我们的合作伙伴使用,他们希望视觉设计与他们自己的网站协调一致。这将使用我们主网站上的功能和数据的子集,在一个单独的URL(我们可以确定)上。
所以我的问题是:在不重复大量代码或模板的情况下,为我的网站添加reskin功能的最佳方法是什么?
正如我所看到的,有几个组件需要协同工作:
网址:需要有一组不同的网址,这些网址指向网站的合作伙伴品牌版本,但可以包含网站构建网页所需的所有标准路径信息。
模板'扩展':需要让模板扩展到不同的基础,例如{%extends'acner.html'%}而不是{%extends'base.html'%}
查看逻辑:当这是合作伙伴品牌版本时,需要让视图知道,以便他们可以适当地更改业务逻辑
到目前为止,我的想法是将合作伙伴网站放在子域中,然后使用中间件解析域名并将“partner”和“partner_template”变量添加到请求对象中。因此,我可以访问我的视图中的request.partner,以处理业务逻辑。然后,我必须编辑所有模板,如下所示:
{% extends request.partner_template|default:'base.html' %}
(根据this answer,'extends'就像任何其他模板标签一样采用变量。)
这会正常吗?还有更好的方法吗?
答案 0 :(得分:0)
如果您对不同的网站使用不同的settings.py
,则可以
指定不同的模板加载目录。 (这可能默认为您的无页面页面。)
就个人而言,我不相信在同一个视图代码中使用不同的业务逻辑,这对我来说就像是一个黑客 - 就像广泛的条件编译在C中一样。
总结一下。
django.contrib.sites
和不同的settings.py