【发布时间】:2017-10-15 12:19:01
【问题描述】:
我正在制作一个 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 个后端管理员,但有多个前端模板和 URL。问题是我不知道如何在 settings.py 中设置 CURRENT_HOST_IP,
通常我使用它来获取用户正在使用的当前 IP / 主机:
request.META['HTTP_HOST']
但我无法访问设置中的请求对象,有没有办法在 Python(不是 django)中获取我在浏览器中输入的 www/IP 地址/主机名?
【问题讨论】:
-
设置不是应用该条件的正确位置。为此编写自定义中间件。参考:docs.djangoproject.com/en/1.11/topics/http/middleware
-
如果我使用中间件,这意味着我已经在其中一个应用程序的 urls.py 中,我想在进入中间件之前决定使用哪个应用程序的 url。
-
可能你不知道中间件的使用。请再次通读文档。当点击域/url时,第一个控制将来到'django.middleware.security.SecurityMiddleware',同样你可以编写自己的中间件
-
我用过中间件。流程是其中一个应用程序中的 settings.py,然后是 urls.py,最后是中间件。我无法更改要使用的应用程序的 url,因为 urls.py 已经处理(如果我使用中间件)
-
你能给出一些代码来展示它是如何完成我想要的吗?
标签: python django python-2.7 python-3.x django-views