如何在settings.py中获取主机名或IP,以便我可以使用它来决定使用哪个应用程序的网址

时间:2017-05-16 12:10:50

标签: python django python-2.7 python-3.x django-views

我正在制作一个django应用程序,它将有2个应用程序。当您打开www.webName.co.id时,它将使用应用程序A中的urls.py,但是当您打开webName.co.uk时,它将使用来自应用程序B的urls.py

这是主项目中的urls.py:

urlpatterns = [
  url(r'^tinymce/', include('tinymce.urls')),
  url(r'^filer/', include('filer.urls')),
  url(r'^ckeditor/', include('ckeditor_uploader.urls')),
  url(r'^admin/', admin.site.urls),
]

我打算在这个文件中添加这样的内容:

if settings.CURRENT_HOST_IP == 'www.webname.co.id':
    urlpatterns += url(r'^', include('webname_id.urls')),
else:
    urlpatterns += url(r'^', include('webname_uk.urls')),

这样,它只会使用正在使用的应用中的网址,具体取决于您输入网站的当前www。

所以我的项目有1个后端管理员,但有多个前端模板和网址。问题是我无法弄清楚如何在settings.py中设置CURRENT_HOST_IP,

通常我用它来获取用户正在使用的当前IP /主机:

 request.META['HTTP_HOST']

但我无法在设置中访问请求对象,Python(不是django)中是否有任何方法可以获取我在浏览器中输入的www / IP地址/主机名?

1 个答案:

答案 0 :(得分:1)

您的主项目中需要两个备用urlconf文件:

# project/project/urls_id.py

from django.conf.urls import url

from urls import urlpatterns

urlpatterns.append(url(r'^', include 'webname_id.urls'))
# project/project/urls_uk.py

from django.conf.urls import url

from urls import urlpatterns

urlpatterns.append(url(r'^', include 'webname_uk.urls'))

在中间件中,根据主机选择合适的urlconf。

class YourMiddleware(object):

    # For Django 1.10+

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):

        if request.get_host() == 'www.webname.co.id':
            request.urlconf = 'project.urls_id'
        else:
            request.urlconf = 'project.urls_uk'

        response = self.get_response(request)

        return response