您可以使用一些自定义中间件来拦截请求并从中获取子域。以下代码将检索子域并通过反转命名的 url重定向到视图。
将它放在应用程序的 middleware.py 文件中。
确保在 settings.py 文件中设置了中间件。
确保您已在 urls.py 中命名您的视图
中间件.py
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
import re
subdomain_pattern = re.compile('(?P<subdomain>.*?)\..*?')
class SubdomainMiddleware(object):
def process_request(self, request):
match = subdomain_pattern.match(request.get_host())
subdomain = match.group('subdomain')
redirect_url = reverse('groups_detail', args=[subdomain])
return HttpResponseRedirect(redirect_url)
网址.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
url(r'^groups/(?P<name>.+)/$', 'groups.views.detail', {}, name='group_detail'),
)
注意:此代码未经测试。
重定向可以改变 URL 的外观。如果您想避免这种情况,只需调用关联的视图,捕获其结果,然后以HttpResponse()
.