我想在与网站其余部分不同的子域上提供专门的RSS源。
我是否可以使用sites框架在单个django实例中使用不同的urls.py和settings.py文件 。或者我是否需要设置两个apache位置,并在apache conf中设置不同的settings.py文件。
我需要设置两个urls.py文件的原因是为了避免重复内容。我不希望主网站在rss.example.com上可用,我不希望在example.com上访问专门的提要
从单个django实例提供服务将是理想的,因为我们在内存有限的共享主机上,打开一个只提供rss的实例似乎是浪费。
编辑:我得出的结论是,多个带有单独urls.py文件的实例对我来说最容易......但我发现这篇文章描述了如何使用单个实例来实现它:
http://effbot.org/zone/django-multihost.htm
我最终编写了一个框架,用于在单个django实例上运行多个站点副本。
基本思路是为每个请求动态更改SITE_ID
设置,并从数据库加载备用设置。它基于域执行此操作,默认情况下使用SITE_ID = 1
(当它找不到任何内容时)
settings.py文件中的所有设置都作为默认值,由当前站点的数据库中存储的设置覆盖。
它工作得很好:)它正在http://rootbuzz.com
的生产中运行答案 0 :(得分:10)
对于Django股票,每个网站都必须有唯一的settings.py
...因为SITE_ID是在settings.py
中定义的,并且是网站处理此请求的关键。
换句话说,SITE_ID对您的实例是全局的,因此您需要为每个站点提供一个实例。
如果您愿意,可以有一个共同的urls.py
,因为没有什么可以阻止您在所有网站ROOT_URLCONF
文件中使用相同的settings.py
...或者您可以有一个不同的每个网站。在这种情况下,您可能希望包含子网址,以防止重复使用任何常见网址。
您可以尝试从单个实例中提供至少两种方法:
使用apache + mod_wsgi并使用WSGIApplicationGroup和/或WSGIProcessGroup指令。我以前从未需要这些,所以不能完全确定它们会以你想要的方式工作,但无论你是否可以在守护进程模式下使用mod_wsgi来大大改善你的内存占用。
您可以使用Django中间件根据请求主机名拒绝/允许URL(请参阅Django文档中的HttpRequest.get_host())。就此而言,即使它会受到轻微的性能影响,您也可以在所有视图上放置一个装饰器来检查传入的主机。
答案 1 :(得分:3)
仅供参考 - 我发布了django-dynamicsites,可以帮助解决这个问题 - https://bitbucket.org/uysrc/django-dynamicsites/src