题
我有两个密切相关的站点,一个主站点和一个移动站点,作为Django应用程序托管。他们将具有许多相同的功能,并且需要访问相同的数据。主要区别是模板将有所不同,并且站点的结构方式将不同。
我有两个单独的虚拟主机,每个主机都适用(尽管我不必那样做)。我的第一个想法是,Django网站框架有助于解决此问题,但文档似乎并没有描述我的用例。
有人可以提示我知道我是否在正确的道路上? urls.py需要不同,因为例如,主页之间的主页完全不同。主要目标是,要共享两个不同应用程序中的数据,以及不需要重复的管理代码。
从主要站点:
- 用户提交了存储在模型中的项目
从移动网站:
- 用户视图列表的列表,并查看刚刚在主站点上输入的项目列表
- 用户在最近添加的项目上给出了5星评级
从主要站点:
- 用户视图在列表中显示了高度评价项目的列表和最近添加的项目(现在的评分很高)。
解决方案 2
好的,这两个答案都很棒,并为我为最终解决方案提供了贡献。
在settings.py文件中,有一个名为root_urlconf的选项。我创建了两个settings.py文件,称为settings_desktop.py and settings_mobile.py,在每个中使用以下代码:
from settings.py import *
ROOT_URLCONF = 'myapp.urls_mobile'
(或桌面,myapp.urls_desktop)
实际上,这提供了许多很酷的功能,例如能够为每个站点使用不同的模板目录,尽管我真的不会这样做。
然后,我创建了两个版本的WSGI文件,其中唯一的区别是该行:
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings_mobile'
或者
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings_desktop'
在每个虚拟主机中,唯一的区别是wsgiscriptalias行,指向每个主机的不同WSGI文件。
这使我能够有效地使用一个可以轻松容纳两个站点的Django应用程序。
感谢您帮助为此解决一个很好的解决方案。
其他提示
看一下 这个问题的答案. 。基本上,您只能使用相同的视图,只需根据用户代理返回不同的模板即可。另外,如果您构建了应用程序逻辑,以便用Django术语将其分解为不同的“应用程序”,那么如果您需要具有类似组件的不同流量,则可以重新使用它们。希望这使您离开并跑步。
更新:
所以可以说您有您的主要网站 http://www.mainsite.com/ 它具有自己的URLS.PY型号。那你就有了 http://www.m.m.mainsite.com/ 它具有自己的URL集和视图。然后,您可以将主站点的模型导入,并在移动站点视图中使用它们。
我做过一次非常相似的事情。我解决这个多个urls.py问题的方式就是这样:
创建两个URLCONF,每个站点一个;
创建一个新的中间件:
from django.utils.cache import patch_vary_headers
class DomainMiddleware:
def __init__(self):
pass
def process_request(self, request):
#avoid problems when reaching the server directly trough IP
host = request.META.get('HTTP_HOST', None)
if host is None: return
host = host.split(':')[0] #remove port number
if host is mobile:
urlconf = "mobile.urls"
else:
urlconf = "default.urls"
request.urlconf = urlconf
def process_response(self, request, response):
patch_vary_headers(response, ('Host',))
return response
还检查为什么必须做 patch_vary_headers在文档上.