Django Apache子域名

时间:2015-09-21 11:31:46

标签: python django apache subdomain

我按照此参考链接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上调用模板时区分它们。

请告诉我我在这里犯了什么错误。如果有任何建议请告诉我。谢谢。

3 个答案:

答案 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 %}模板标记将使用新的反向函数。