Django app中基于子域的URL配置

时间:2014-03-29 14:48:29

标签: python django

一般想法: 例如,用户John创建了两个页面,其中urls / about /和/ about / contacts /,他的域名为john.app.com。 用户Bob用urls / company /,/ news /,/ store /创建了三个页面,他的域名是bob.app.com。所以,如果用户访问网站john.app.com,我想加载2个网址的url方案,如果用户访问bob.app.com,我想使用带有3个url模式的方案......

我使用django-subdomains包为不同的子域使用不同的url方案。基本上为了实现我的想法,我需要获取当前的子域并从DB的可用页面获取该子域的URL以及Django开始提供url模式。有谁知道我该怎么做?

2 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案......它不是很聪明,但它有效:

在我的urls.py中,我编写了规则,接受所有请求并将它们指向page_dispatcher视图:

urlpatterns = patterns('',
   url(r'^$', 'app.account.site.views.page_dispatcher'),
   url(r'^(?P<path>.+)$', 'app.account.site.views.page_dispatcher'),
)

之后,在我的views.py中,我创建了动态网址配置,并使用resolve()函数解析与请求路径对应的视图:

class DynamicURLConf(object):
    urlpatterns = None

    def __init__(self, pages):
        self.urlpatterns = patterns('',
                                    url(r'^$', 'app.account.site.views.test'),
                                    url(r'^test/$', 'app.account.site.views.test'),
        )


def page_dispatcher(request, path=None):
    if path is None:
        # Here will be a return a homepage view
        return
    func, args, kwargs = resolve(urlparse("/" + path.strip("/") + "/")[2], DynamicURLConf(pages=None))
    kwargs['request'] = request
    return func(*args, **kwargs)


def test(request):
    return HttpResponse("I am test")

答案 1 :(得分:0)

很容易这样做! 你应该知道在使用appache2 + mod_wsgi

部署网站时

wsgi.py您会发现settings.py 并在settings.py中找到相应的urls.py

所以只需在项目中使用两个或更多settings.pyurls.py

并更改您的apache配置文件

john.app.com - &gt; john.conf - &gt; john.wsgi.py - &gt; john.settings.py - &gt; john.urls.py

见这里:http://www.besttome.com/html/run_multiple_websites_one_django_project.html