单个django实例上的"站点框架"

Jia*_*aro 6 apache django rss settings sites

我想在与站点其余部分不同的子域上提供专门的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特百惠

我最终编写了一个框架,用于在单个django实例上运行多个站点副本.

基本思想是SITE_ID为每个请求动态更改设置,并从数据库加载备用设置.它基于域执行此操作并SITE_ID = 1默认使用(当它找不到任何内容时)

settings.py文件中的所有设置都作为默认值,由当前站点的数据库中存储的设置覆盖.

它工作得很好:)它正在http://rootbuzz.com的生产中运行

Van*_*ale 10

使用Django库存,您必须settings.py为每个站点都有一个唯一的...因为SITE_ID是在settings.py其中定义的,并且是站点处理此请求的关键.

换句话说,SITE_ID对于您的实例是全局的,因此您需要每个站点的实例.

urls.py如果您愿意,可以有一个共同点,因为没有什么可以阻止您ROOT_URLCONF在所有站点settings.py文件中使用相同的...或者您可以为每个站点使用不同的一个.在这种情况下,您可能希望包含子URL,以防止重复使用任何常见的URL.

您可以尝试从单个实例提供至少两种方法:

  1. 使用apache + mod_wsgi并使用WSGIApplicationGroup和/或WSGIProcessGroup指令.我以前从来没有需要这些,所以不能完全确定它们会按照你想要的方式工作,但是无论你在守护进程模式下都能使用mod_wsgi来大大改善你的内存占用.

  2. 您可以使用Django中间件根据请求主机名拒绝/允许URL(请参阅Django文档中的HttpRequest.get_host()).就此而言,即使它会受到轻微的性能影响,您也可以在所有视图上放置一个装饰器来检查传入的主机.