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

标签 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')),

这样,它将仅使用正在使用的应用程序中的 URL,具体取决于您进入网站时使用的当前 www。

所以我的项目有 1 个后端管理员,但有多个前端模板和 url。问题是我不知道如何在 settings.py 中设置 CURRENT_HOST_IP,

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

 request.META['HTTP_HOST']

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

最佳答案

您的主项目中需要两个备用 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

关于python - 如何在settings.py中获取主机名或IP,以便我可以使用它来决定要使用哪个应用程序的网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44001085/

相关文章:

python - 如果为空,则 append 到 DataFrame 时出现问题

python - 在 linux python 中运行文件时遇到问题

Python 多级字典的字符串格式化

python - 使用 Python GData API,无法获取可编辑的视频条目

python - 验证 Django 中是否存在电子邮件

python - igraph 库出错 - 已弃用的库

python - 查找 3d 列表中最里面列表的子列表

python - Django 为静态文件返回 404

python - 将Django Python应用程序放入Docker容器后获得404错误消息

python - 使用 Tornado Python 进行异步函数调用