6

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

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

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

settings.py 文件中的所有设置都充当默认设置,这些设置被存储在当前站点数据库中的设置覆盖。

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

4

2 回答 2

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())。就此而言,即使它会对性能造成轻微影响,您也可以在所有视图上放置一个装饰器来检查传入的主机。

于 2009-06-17T17:11:20.467 回答
3

仅供参考 - 我发布了 django-dynamicsites 可以帮助解决这个问题 - https://bitbucket.org/uysrc/django-dynamicsites/src

于 2011-03-27T01:42:06.857 回答