不同的 URL 配置取决于 Django 中的域

Different URL config depending on domain in Django

在 Mezzanine 中,您可以使用两个不同的 URL,具体取决于您要显示的内容。有没有办法检查 inside urls.py 活动域是在子域上还是仅在 "regular" 域上?

这是两种不同的风格:

url('^$', direct_to_template, {'template': 'index.html'}, name='home'),
url('^$', mezzanine.blog.views.blog_post_list, name='home'),

我还没有找到可靠的方法。如果我在子域(通配符/例如 sub.example.com),我想显示 blog_post_list,如果我在 "main" 域(例如,example.com),我想显示 index.html

不,urls.py 在您的应用程序启动时加载并且只查看路径。当前 URL 是中间件和视图接收的 request 对象的一部分。

但是,您可以根据 URL 路径使用视图来委托请求。

url('^$', my_view, name='home')

并且视图可以使用当前 request 对象委托给两个后续视图之一。

def my_view(request):
    if 'something' in request.META['HTTP_HOST']:
        return something_view(request)
    else:
        return another_view(request)

但是,有一个应用程序可以做您想做的事,django-hosts。它允许根据主机加载不同的 urls.py 文件。

from django_hosts import patterns, host

host_patterns = patterns('path.to',
    host(r'api', 'api.urls', name='api'),
    host(r'beta', 'beta.urls', name='beta'),
)