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