我有两个密切相关的站点,一个主站点和一个移动站点,作为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在文档上.

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