如何正确地从一个应用程序重定向到 Django 中的另一个应用程序

how to properly redirect from one app to another app in django

我是 Django 的初学者,我无法正确处理从一个应用程序到另一个应用程序的重定向。我有 2 个应用程序帐户,仪表板。 Accounts 处理 AuthUser 的登录和注册。仪表板处理其他功能,如 Fileupload

到目前为止,我已成功使用 reverse() 方法从 /accounts/login 重定向到我的上传页面,但它从 /accounts/login 重定向到 /accounts/upload 而不是 /dashboard/upload .

项目网址

urlpatterns = [
    path('dashboard/', include('Dashboard.urls')),
    path('accounts/', include('Accounts.urls')),
    path('admin/', admin.site.urls),
]

帐号urls.py

urlpatterns = [
    url('upload',DashboardViews.upload, name='upload'),
    path('login', views.login, name='Login'),
    path('register', views.register, name='Register'),
    path('logout', views.logout, name='logout')
]

帐号views.py

def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    if request.method == 'POST':

        user_name = request.POST.get("username")
        password = request.POST.get("password")

        user = auth.authenticate(username=user_name,password=password)

        if user is not None:
            auth.login(request,user)
            return redirect(reverse('upload'))
        else:
            print('Failed') 
            return render(request,'login')

我的意图是每当用户 (login/register) 时,网页应该从 /account/login 重定向到 /dashboard/upload。

这是因为您在 Accounts 应用的 url 模式中定义了 上传 url .
如果您希望完整路径为 /dashboard/upload,则应将其放在 Dashboard 应用程序的 urls.py 文件中,而不是 /accounts/upload.

进一步解释一下,当您使用 include 函数定义路径时,如下所示:

   path("accounts/", include("Accounts.urls")

“帐户”应用中的所有 url 都将在开头附加 "accounts/"。

注意:如果将name参数添加到path,则可以在all[=]中使用它35=] 你的 appsreverse 函数。路径不必在您要调用反向函数的同一应用程序中声明。

避免 url 冲突的一个好习惯是将应用程序的名称添加到 url。所以你应该将 upload 路径命名为 dashboard_upload.

我遇到了同样的问题,但下面的技术对我有用。

Dashboard 应用程序的 urls.py 文件中,使用 app_name = "Dashboard"。然后在你的 redirect() 函数中使用 appName:Path 结构。例如,使用 redirect('Dashboard:upload')