2

我有两个站点共享相同的 models.py 和管理后端,但使用不同的 views.py 和不同的模板文件。

有没有办法让 Django 为两个域名中的每一个使用不同的 views.py 文件?我可以在某种自定义中间件中查看 request.HTTP_HOST 吗?

4

3 回答 3

7

扩展@jdi的答案。Sites 框架是在 Django 中为此目的而设计的,但是您需要分别为每个域提供服务才能利用它。您所做的是为每个域创建一个单独的 settings.py 文件。不过,您仍然可以拥有一个通用的 settings.py,每个都包含。例如:

设置.py

# all common settings here

domain1_settings.py

from settings import *

SITE_ID = 1
ROOT_URLCONF = domain1_urls.py

domain2_settings.py

from settings import *

SITE_ID = 2
ROOT_URLCONF = domain2_urls.py

然后,您手动指定启动服务器时要使用的设置文件:

发展

python manage.py runserver --settings=domain1_settings.py

生产(独角兽)

python manage.py run_gunicorn --settings=domain1_settings.py

生产(uwsgi)

uwsgi --env DJANGO_SETTINGS_MODULE=myproject.domain1_settings

显然,您更可能希望将其包含在 gunicorn/uwsgi 的实际配置中;以上仅用于说明目的。

于 2012-05-21T19:16:27.100 回答
3

我相信这是 django 中站点框架的目的:
https ://docs.djangoproject.com/en/1.4/ref/contrib/sites/

您定义站点,并有设施在您的项目中检查这一点。

于 2012-05-21T18:51:56.830 回答
0

@jdi 提到的Sites框架可能是您正在寻找的,尽管它可能需要您将django.contrib.sites.models.Site模型集成到当前模型中。

另一种选择是,如果您已经(或计划拥有)两个 Django 站点在两个不同的服务器进程中运行,那么您可以考虑将两个不同的settings.py文件与每个进程相关联。每个settings.py文件本质上是相同的,只是引用不同的urls.py文件,而不同的文件又会引用不同的views.py文件。

如果您将来看到这两个站点的差异更大,则此解决方案可能会更好。

于 2012-05-21T19:09:07.213 回答