在 Django 中,可以动态更改 urlpatterns。
例如 i18n 模块就是这样做的。 https://docs.djangoproject.com/en/5.0/topics/i18n/translation/#translated-url-patterns
我想要类似的东西,它根据视图的主机名改变模式。
for exmaple for www.example.com I want:
path("articles/", views.articles),
www.example.it
path("articolo/", views.articles),
www.example.de
path("artikel/", views.articles),
每个主机名都应该有一个查找表,如果未定义,则应有一个默认值。
我该怎么做?
尝试使用 Django 中间件
class DynamicURLMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
host = request.get_host()
url_mappings = {
'www.example.com': 'articles',
'www.example.it': 'articolo',
'www.example.de': 'artikel',
# Add more hostnames and their corresponding patterns as needed
}
default_pattern = 'articles' # Default pattern if the hostname doesn't match
# Modify the URL pattern based on the hostname
if host in url_mappings:
request.urlconf = 'myapp.urls_' + url_mappings[host]
else:
request.urlconf = 'myapp.urls_' + default_pattern
return self.get_response(request)
from django.urls import path
from . import views
urlpatterns = [
path('articles/', views.articles, name='articles'),
# Other patterns specific to www.example.com
]
MIDDLEWARE = [
# ... other middlewares
'myapp.middleware.DynamicURLMiddleware',
# ... other middlewares
]