django 管理特定的重定向
django admin specific redirects
我有一个 Django 网站,其中所有 url 都指向管理员,如下所示:
urls.py(根)
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('', admin.site.urls),
]
我想知道如何进行从一个 url 到另一个的特定重定向,因为我只有一个模型和一个应用程序要管理:
localhost/ => localhost/app/computer
localhost/app/ => localhost/app/computer
我尝试将此添加到 urls.py,但它不起作用:
from django.http import HttpResponseRedirect
path('/', lambda request: HttpResponseRedirect('/app/computer/'))
我也考虑过将 urls.py
添加到应用程序,但我认为可能存在冲突,因为 path('')
将同时存在于 urls.py
、根目录和应用程序
我能够通过使用自定义 RedirectMiddleware
来实现这一点
settings.py
...
MIDDLEWARE = [
...
'app.middleware.RedirectMiddleware',
]
...
ROUTES = [
{'source': '/', 'destination': '/app/computer/'},
{'source': '/app/', 'destination': '/app/computer/'}
]
middleware.py
from django.conf import settings
from django.shortcuts import redirect
def RedirectMiddleware(get_response):
def middleware(request):
response = get_response(request)
path = request.path
for route in settings.ROUTES:
source = route['source']
destination = route['destination']
if path == source:
return redirect(destination)
return response
return middleware
不一定是最好的,但目前可以用,如果有更好的建议,我们将不胜感激。
我有一个 Django 网站,其中所有 url 都指向管理员,如下所示:
urls.py(根)
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('', admin.site.urls),
]
我想知道如何进行从一个 url 到另一个的特定重定向,因为我只有一个模型和一个应用程序要管理:
localhost/ => localhost/app/computer
localhost/app/ => localhost/app/computer
我尝试将此添加到 urls.py,但它不起作用:
from django.http import HttpResponseRedirect
path('/', lambda request: HttpResponseRedirect('/app/computer/'))
我也考虑过将 urls.py
添加到应用程序,但我认为可能存在冲突,因为 path('')
将同时存在于 urls.py
、根目录和应用程序
我能够通过使用自定义 RedirectMiddleware
settings.py
...
MIDDLEWARE = [
...
'app.middleware.RedirectMiddleware',
]
...
ROUTES = [
{'source': '/', 'destination': '/app/computer/'},
{'source': '/app/', 'destination': '/app/computer/'}
]
middleware.py
from django.conf import settings
from django.shortcuts import redirect
def RedirectMiddleware(get_response):
def middleware(request):
response = get_response(request)
path = request.path
for route in settings.ROUTES:
source = route['source']
destination = route['destination']
if path == source:
return redirect(destination)
return response
return middleware
不一定是最好的,但目前可以用,如果有更好的建议,我们将不胜感激。