我按照此参考链接Multiple Sites in Django的步骤进行操作,并在apache中配置。但有一件事如何在模板中调用这些域
如果我直接在地址栏中输入域名,那么它正在运行。但是想通过链接服务器(<a href="">Domain1</a>
)
如上所述,单独的settings.py和wsgi.py。
我有两个单独的网址。
domain1_urls.py
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^$', 'domain1.views.domain1', name='domain1'),
)
domain2_urls.py
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^$', 'domain2.views.domain2', name='domain2'),
)
的index.html
<li><a href="{% url 'domain1' %}">domain1</a></li>
<li><a href="{% url 'domain2' %}">domain2</a></li>
着陆页是domain1。在着陆页模板中,有一个domain2链接。如果我点击它只是重定向到domain1本身。它对我不起作用,两个URL Domian1和Domain 2服务器'/'如何在公共index.html上调用模板时区分它们。
请告诉我我在这里犯了什么错误。如果有任何建议请告诉我。谢谢。
答案 0 :(得分:1)
您的两个网址都指向相同的根(/),请尝试以下
在domain2_urls.py
中from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^domain2/$', 'domain2.views.domain2', name='domain2'),
)
答案 1 :(得分:0)
我认为你需要改变app的架构。在视图级别捕获域信息。 例如:
from django.views.generic import View, TemplateView
class DomainMixin(View):
def get_template_names(self):
return ['{domain}/{template_name}'.format(domain=self.current_domain, template_name=self.template_name)]
def dispatch(self, request, *args, **kwargs):
self.current_domain = request.META['HTTP_HOST']
return super(DomainMixin, self).dispatch(request, *args, **kwargs)
class IndexView(DomainMixin, TemplateView):
template_name = 'my_app/index_view.html'
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
### domain specific logic ###
if self.current_domain == '':
pass
return context
答案 2 :(得分:0)
创建Django站点框架是为了处理共享一个数据库的多个站点,也可能是其他一些东西,它不是为了处理跨越多个域的一个站点而创建的。
为了正确处理它,我建议django-subdomains包。创建它是为了处理这个确切的情况。它包含4个主要内容:将检测您的子域的简单中间件,继承自之前的中间件,另外可以基于子域交换ROOT_URLCONF
,新的反向函数将采用子域关键字参数并在适当的urlpatterns中执行url查找新的{% url %}
模板标记将使用新的反向函数。