4

我有两个密切相关的站点,一个主站点和一个移动站点,作为 django 应用程序托管。他们将拥有许多相同的功能并且需要访问相同的数据。主要区别在于模板会有所不同,网站的结构也会有所不同。

我有两台独立的虚拟主机,每台一台(虽然我不必那样做)。我的第一个想法是 Django 站点框架有助于解决这个问题,但文档似乎没有描述我的用例。

有人可以给我一个提示,知道我是否走在正确的轨道上吗?urls.py 需要有所不同,例如,应用程序之间的主页完全不同。主要目标是要共享两个不同应用程序中的数据,并且无需复制要管理的代码。

从主站点:

  • 用户提交存储在模型中的项目

从手机网站:

  • 用户查看项目列表并查看刚在主站点上输入的项目
  • 用户对最近添加的项目给予 5 星评价

从主站点:

  • 用户查看高评分项目列表,最近添加的项目(现在具有高评分)显示在列表中。
4

3 回答 3

4

看看这个对类似问题的回答。基本上,您可以使用相同的视图并根据用户代理返回不同的模板。此外,如果您构建应用程序逻辑以便将其分解为 django 术语中的不同“应用程序”,那么如果您需要具有相似组件的不同流程,则可以重用它们。希望这能让你开始跑步。

更新:

因此,假设您有自己的主站点http://www.mainsite.com/,它有自己的 urls.py models.py 和 views.py,它们使您的功能适用于主站点。然后你有http://www.m.mainsite.com/它有它自己的一组 url 和视图。然后您可以只导入主站点的模型并在移动站点视图中使用它们。

于 2011-01-06T20:33:46.353 回答
1

好的,这两个答案都很棒,并且对我为最终解决方案选择的内容做出了贡献。

在 settings.py 文件中有一个名为 ROOT_URLCONF 的选项。我创建了两个 settings.py 文件,分别称为 settings_desktop.py 和 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'

在每个虚拟主机中,唯一的区别是指向每个主机的不同 wsgi 文件的 WSGIScriptAlias 行。

这使我能够有效地使用一个可以轻松容纳两个站点的 django 应用程序。

感谢您帮助制定一个好的解决方案。

于 2011-01-09T02:37:06.813 回答
0

我曾经做过非常相似的事情。我解决多个 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

还要检查为什么你必须在 docs 上做patch_vary_headers

于 2011-01-06T22:17:14.393 回答