请告诉我是否有可能(如果是这样,如何)用于每个用户子域的页面。例如,现在我有一个表单的网址:http://hostname.com/user/1我需要http://username.hostname.com/
答案 0 :(得分:14)
根据你想要的深度,你有很多选择。
一种选择是在Web服务器级别处理路由。基本上,您将捕获URL的子域部分,并将其重写到服务器中的其他位置。
例如,http://username1.local.host/signin
将由您的网络服务器捕获,并在内部路由到/username1/signin
等资源。最终用户将是子域名,但您的代码将处理网址部分,而不是更明智的事情。
您的urls.py将像任何正常请求一样处理此事。
url_pattern = [
...
url(r'(?P<subdomain>[a-z]+)/sigin/$', 'view'),
]
对于Nginx,您需要查看&#34;子域名到子目录重写&#34;。
我个人会将此选项用于您在问题中说明的内容。虽然这种方法最初设置起来有点棘手(保持它直到它工作)。从长远来看,维护和使用起来会容易得多。
另一种选择是使用Django Subdomains这样的包来处理django级别的子域名(过去我曾使用过这个版本,并认为它是我的首选选项(在处理方面) django代码中的子域名))。 没有太多细节,nginx将捕获子域并将其全部路由到django。然后Django将处理中间件级别的子域。
就我个人而言,我会使用选项1。选项2是您希望在不同的域上使用不同的应用,例如:blog.local.host
,support.local.host
。
答案 1 :(得分:2)
考虑使用 django-hosts
来自文档:
# For example, if you own example.com but want to serve
# specific content at api.example.com and beta.example.com,
# add the following to a hosts.py file:
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'),
)