Django在同一个实例上的多个站点

时间:2012-05-10 09:03:10

标签: django sites multiple-sites

我如何才能获得一些功能相似但外观和内容不同的网站 - 所有数据都会有所不同。

动态更改SITE_ID并编写自己的模板加载器& staticfile finder(相同的URL / static /不同的站点表示不同的类别)并为所有人添加ForeignKey到站点?

还是有其他方法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

我做了类似于你自己的事情。

我的视图中有一个辅助方法可以获取主机。

def getHost(request):     return request.META ['SERVER_NAME']

然后根据主机我的静态目录分为2个站点 静态/主机1 / 静态/主机2 /

我对模板做了同样的事情,我将它分成2个目录,然后调用appropriote!

答案 1 :(得分:1)

在同一个实例上拆分Django站点是一项微妙的操作。 首先,您必须牢记您的模型。与FlatPages一样,您的模型可能包含到Sites表的ManyToManyField,因此您可以根据需要根据当前站点过滤内容。

关于模板和静态数据,我喜欢Mark的答案,但你可以采用不同的方式。 您可以将模板和静态文件夹拆分为具有不同主题和模板配置的多个文件夹。 例如,您可以只有一组模板,以及两个“主题”,如下所示:

templates 
    / normal_set
static 
    / themes 
        / blue
        / red

您可以创建一个表calles SiteConfiguration,其中OneToOneField指向Sites表。此配置表将包含模板文件夹的名称和站点的主题文件夹的名称,以便您可以在站点之间共享属性。 也许你可以在之后缓存它以避免过于频繁地访问数据库。 把这个建议和马克的建议结合起来,也许吧。

我认为您的用户在每个网站都保持不变。

答案 2 :(得分:0)

为这个确切的用例设计了2个包:

对于Django 1.8+,有https://bitbucket.org/levit_scs/django-polla

如果您使用的是旧版本的Django,则可以使用https://bitbucket.org/uysrc/django-dynamicsites/overview

即使这个答案很晚,但我希望它可以帮助人们绊倒这个问题