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

不一定是最好的,但目前可以用,如果有更好的建议,我们将不胜感激。