我想在其他站点的不同子域上提供专门的RSS源。
我可以使用网站框架在单个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
设置,并从数据库加载备用设置。 它基于域进行,默认情况下使用SITE_ID = 1
(当找不到任何东西时)
settings.py文件中的所有设置都作为默认值,被当前站点的数据库中存储的设置覆盖。
它工作得很好:),它在http://rootbuzz.com上的生产中运行
使用股票Django,您必须为每个站点settings.py
一个独特的settings.py
…因为SITE_ID在settings.py
定义,并且是站点处理此请求的关键。
换句话说,SITE_ID对于您的实例是全局的,因此您需要每个站点的实例。
如果你愿意的话,你可以有一个共同的urls.py
,因为没有什么能够阻止你在你所有的站点settings.py
文件中使用相同的ROOT_URLCONF
…或者你可以为每个站点使用不同的ROOT_URLCONF
。 在这种情况下,您会希望包含子网址,以防止重复您自己的任何常见网址。
至少有两种方法可以尝试从单个实例提供服务:
使用apache + mod_wsgi并使用WSGIApplicationGroup和/或WSGIProcessGroup指令。 我从来没有需要这些,所以不能完全确定这些将按照你想要的方式工作,但无论你可以在守护进程模式下肯定使用mod_wsgi来大大提高你的内存占用。
您可以使用Django中间件来拒绝/允许基于请求主机名的URL(请参阅Django文档中的HttpRequest.get_host() )。 对于这个问题,即使这会造成轻微的性能下降,你可以在所有视图上放置一个装饰器来检查传入的主机。
仅供参考 – 我发布了django-dynamicsites,可以帮助解决这个问题 – https://bitbucket.org/uysrc/django-dynamicsites/src