Django - 为两个不同的域名使用不同的views.py?

时间:2012-05-21 18:31:10

标签: django url-routing

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

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

3 个答案:

答案 0 :(得分:6)

对@ jdi的答案进行扩展。站点框架是在Django中为此目的而制作的,但您需要单独为每个域提供服务以利用它。您要做的是为每个域创建一个单独的settings.py文件。您仍然可以使用每个包含的常见settings.py.例如:

settings.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

生产(gunicorn)

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

生产(uwsgi)

uwsgi --env DJANGO_SETTINGS_MODULE=myproject.domain1_settings

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

答案 1 :(得分:2)

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

您可以定义网站,并有设施在您的项目中进行检查。

答案 2 :(得分:0)

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

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

如果你看到这两个网站将来发生更多分歧,这个解决方案可能会更好。