一般想法: 例如,用户John创建了两个页面,其中urls / about /和/ about / contacts /,他的域名为john.app.com。 用户Bob用urls / company /,/ news /,/ store /创建了三个页面,他的域名是bob.app.com。所以,如果用户访问网站john.app.com,我想加载2个网址的url方案,如果用户访问bob.app.com,我想使用带有3个url模式的方案......
我使用django-subdomains包为不同的子域使用不同的url方案。基本上为了实现我的想法,我需要获取当前的子域并从DB的可用页面获取该子域的URL以及Django开始提供url模式。有谁知道我该怎么做?
答案 0 :(得分:1)
好的,我找到了解决方案......它不是很聪明,但它有效:
在我的urls.py中,我编写了规则,接受所有请求并将它们指向page_dispatcher视图:
urlpatterns = patterns('',
url(r'^$', 'app.account.site.views.page_dispatcher'),
url(r'^(?P<path>.+)$', 'app.account.site.views.page_dispatcher'),
)
之后,在我的views.py中,我创建了动态网址配置,并使用resolve()函数解析与请求路径对应的视图:
class DynamicURLConf(object):
urlpatterns = None
def __init__(self, pages):
self.urlpatterns = patterns('',
url(r'^$', 'app.account.site.views.test'),
url(r'^test/$', 'app.account.site.views.test'),
)
def page_dispatcher(request, path=None):
if path is None:
# Here will be a return a homepage view
return
func, args, kwargs = resolve(urlparse("/" + path.strip("/") + "/")[2], DynamicURLConf(pages=None))
kwargs['request'] = request
return func(*args, **kwargs)
def test(request):
return HttpResponse("I am test")
答案 1 :(得分:0)
很容易这样做! 你应该知道在使用appache2 + mod_wsgi
部署网站时 wsgi.py
您会发现settings.py
并在settings.py
中找到相应的urls.py
所以只需在项目中使用两个或更多settings.py
和urls.py
并更改您的apache配置文件
john.app.com - &gt; john.conf - &gt; john.wsgi.py - &gt; john.settings.py - &gt; john.urls.py
见这里:http://www.besttome.com/html/run_multiple_websites_one_django_project.html