如何正确地从一个应用程序重定向到 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=] 你的 apps 与 reverse 函数。路径不必在您要调用反向函数的同一应用程序中声明。
避免 url 冲突的一个好习惯是将应用程序的名称添加到 url。所以你应该将 upload 路径命名为 dashboard_upload.
我遇到了同样的问题,但下面的技术对我有用。
在 Dashboard
应用程序的 urls.py
文件中,使用 app_name = "Dashboard"
。然后在你的 redirect()
函数中使用 appName:Path 结构。例如,使用 redirect('Dashboard:upload')
我是 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=] 你的 apps 与 reverse 函数。路径不必在您要调用反向函数的同一应用程序中声明。
避免 url 冲突的一个好习惯是将应用程序的名称添加到 url。所以你应该将 upload 路径命名为 dashboard_upload.
我遇到了同样的问题,但下面的技术对我有用。
在 Dashboard
应用程序的 urls.py
文件中,使用 app_name = "Dashboard"
。然后在你的 redirect()
函数中使用 appName:Path 结构。例如,使用 redirect('Dashboard:upload')