【问题标题】:Django: Change root url in applicationDjango:在应用程序中更改根 URL
【发布时间】:2021-05-20 06:28:15
【问题描述】:
我的服务器上有一个可用的应用程序/系统(Python 3.9、Django 3.1)。
现在我需要将它移动到另一个具有别名的服务器。
从这个www.myserver.com到这个www.otherserver.com/myapp。
在 Apache2 配置中,我有行 WSGIScriptAlias /myapp /path/to/myapp/wsgi.py。
但现在我对应用程序中的所有链接都有问题,例如从索引页面到目录页面的链接重定向到www.otherserver.com/catalog,但我需要www.otherserver.com/myapp/catalog。
- Django 中有什么特性吗?
- 是否可以在 settings.py 中只设置一些全局变量?
- 我需要编辑模板中的所有链接吗?
什么是最好的解决方案?
【问题讨论】:
标签:
python
django
url
hyperlink
navigation
【解决方案1】:
您可以通过调整 ROOT_URLCONF 设置变量的值来进行设置。为此,您需要有两个 URL 模块
#project/urls/myserver.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('app/', include('app.urls'))
]
#project/urls/other_server.py
from django.urls import include, path
from .myserver import urlpatterns as my_server_patterns
urlpatterns = [
path('catalog/', include(my_server_patterns)),
]
现在从环境中获取 ROOT_URLCONF 的值
import os
ROOT_URLCONF = os.environ.get("ROOT_URLCONF", "project.urls.myserver")
【解决方案2】:
一种快速的方法是在新路径中包含项目 url 模式。
制作一个新的模式列表,例如base_patterns
base_patterns = [
path('admin/', admin.site.urls),
path('app/', include('app.urls),
]
在主 urls.py 的底部,在新路径中包含 base_patterns。
urlpatterns = [
path('catalog/', include(base_patterns)),
]