【发布时间】:2012-05-18 19:58:46
【问题描述】:
我怎样才能获得一些功能相似但外观和内容不同的网站 - 所有数据都会不同。
即时更改 SITE_ID 并编写自己的模板加载器和静态文件查找器(不同站点的相同 URL /static/ 表示不同的类别)并将 ForeignKey 添加到所有站点?
或者有其他方法吗?
谢谢!
【问题讨论】:
标签: django sites multiple-sites
我怎样才能获得一些功能相似但外观和内容不同的网站 - 所有数据都会不同。
即时更改 SITE_ID 并编写自己的模板加载器和静态文件查找器(不同站点的相同 URL /static/ 表示不同的类别)并将 ForeignKey 添加到所有站点?
或者有其他方法吗?
谢谢!
【问题讨论】:
标签: django sites multiple-sites
为这个确切的用例设计了 2 个包:
对于 Django 1.8+,有 https://bitbucket.org/levit_scs/django-polla
如果你使用的是旧版本的 Django,你可以使用https://bitbucket.org/uysrc/django-dynamicsites/overview
尽管这个答案已经很晚了,但我希望它可以帮助人们在这个问题上绊倒
【讨论】:
在同一实例上拆分 Django 站点是一项微妙的操作。 首先,您必须牢记您的模型。与 FlatPages 一样,您的模型可能包含 Sites 表的 ManyToManyField,因此您可以根据需要根据当前站点过滤内容。
关于模板和静态数据,我喜欢 Mark 的回答,但您可以采用不同的方式。 您可以将模板和静态文件夹拆分为具有不同主题和模板配置的多个文件夹。 例如,您可能只有一组模板和两个这样的“主题”:
templates
/ normal_set
static
/ themes
/ blue
/ red
您可以创建一个名为 SiteConfiguration 的表,其中包含一个指向 Sites 表的 OneToOneField。此配置表将包含站点的模板文件夹的名称和主题文件夹的名称,以便您可以在站点之间共享属性。 也许您可以稍后缓存它以避免过于频繁地访问数据库。 也许把这个建议和马克的建议混在一起。
我假设您的用户在每个网站上都保持不变。
【讨论】:
我做了和你类似的事情。
我的视图中有一个辅助方法可以获取主机。
def getHost(请求): 返回请求.META['SERVER_NAME']
然后根据主机,我将静态目录分成 2 个站点 静态/host1/ 静态/host2/
我对模板做同样的事情,我将它分成 2 个目录并调用适当的一个!
【讨论】: