我有两个站点共享相同的 models.py 和管理后端,但使用不同的 views.py 和不同的模板文件。
有没有办法让 Django 为两个域名中的每一个使用不同的 views.py 文件?我可以在某种自定义中间件中查看 request.HTTP_HOST 吗?
我有两个站点共享相同的 models.py 和管理后端,但使用不同的 views.py 和不同的模板文件。
有没有办法让 Django 为两个域名中的每一个使用不同的 views.py 文件?我可以在某种自定义中间件中查看 request.HTTP_HOST 吗?
扩展@jdi的答案。Sites 框架是在 Django 中为此目的而设计的,但是您需要分别为每个域提供服务才能利用它。您所做的是为每个域创建一个单独的 settings.py 文件。不过,您仍然可以拥有一个通用的 settings.py,每个都包含。例如:
# all common settings here
from settings import *
SITE_ID = 1
ROOT_URLCONF = domain1_urls.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 --env DJANGO_SETTINGS_MODULE=myproject.domain1_settings
显然,您更可能希望将其包含在 gunicorn/uwsgi 的实际配置中;以上仅用于说明目的。
我相信这是 django 中站点框架的目的:
https ://docs.djangoproject.com/en/1.4/ref/contrib/sites/
您定义站点,并有设施在您的项目中检查这一点。
@jdi 提到的Sites
框架可能是您正在寻找的,尽管它可能需要您将django.contrib.sites.models.Site
模型集成到当前模型中。
另一种选择是,如果您已经(或计划拥有)两个 Django 站点在两个不同的服务器进程中运行,那么您可以考虑将两个不同的settings.py
文件与每个进程相关联。每个settings.py
文件本质上是相同的,只是引用不同的urls.py
文件,而不同的文件又会引用不同的views.py
文件。
如果您将来看到这两个站点的差异更大,则此解决方案可能会更好。