您可以使用一些自定义中间件来拦截请求并从中获取子域.下面的代码将检索子域并重定向到reversing the named url之前的视图.
将其放入应用程序的midleware.py文件中.
确保在settings.py文件中设置了中间件.
确保已在URL中命名视图.py
middleware.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)
urls.py个
from django.conf.urls.defaults import *
urlpatterns = patterns('',
url(r'^groups/(?P<name>.+)/$', 'groups.views.detail', {}, name='group_detail'),
)
Note: this code is untested.
重定向可能会改变URL的外观.如果您想避免这种情况,只需调用关联的视图,捕获其结果,然后以HttpResponse()
的形式返回.