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

中投入生产
有帮助吗?

解决方案

使用Django库存,您必须为每个站点提供唯一的 settings.py ...因为SITE_ID是在 settings.py 中定义的,并且是哪个站点的关键正在处理这个请求。

换句话说,SITE_ID对您的实例是全局的,因此您需要为每个站点提供一个实例。

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

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

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

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top