我正在使用Django和Pinax启动一个新的web应用程序项目.我希望能够给我的用户提供独特的域名,比如Wordpress和其他网站:username.wordpress.com.我不确定如何使用Django实现这一点,因为url解析逻辑(在url.py中)是从域名后的url开始的.

更具体地说,将有多个用户组,每个组都有一个唯一的名称.我不确定这会有什么不同,但我想我应该提一下.

是否有某种方法可以操纵http请求,使该URL在Django看来像是www.domain.com/groupname,但在浏览器地址栏中仍然显示为groupname.domain.com

推荐答案

您可以使用一些自定义中间件来拦截请求并从中获取子域.下面的代码将检索子域并重定向到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()的形式返回.

Django相关问答推荐

批量删除多对多条目?

Django相关对象引用模板

Django模型ManyToManyField.Add不起作用

模仿没有像预期的那样工作(Django)

如何在 Django 模板中的计数器上进行 for 循环中断?

Django 在模型中存储用户图像

如何解决 AssertionError: .accepted_renderer not set on Response in django and ajax

Django REST Framework ModelSerializer get_or_create 功能

如何在 Django ORM 中执行 GROUP BY ... COUNT 或 SUM?

django.request 记录器没有传播到根目录?

模型中的外键

Django rest-auth allauth 注册,带有邮箱、名字和姓氏,没有用户名

base.html 中的 Django 变量

Django:使用render或render_to_response时添加响应头

Django-获取外键模型

Table doesn't exist表不存在

将 jQuery 脚本添加到 Django 管理界面

Django 的 Select .如何设置默认选项?

XlsxWriter 对象另存为 http 响应以在 Django 中创建下载

ValueError: 无法解析相关模型 u'app.model'