我是Django的初学者,我无法正确处理从一个应用程序到另一个应用程序的重定向。我有2个应用程序帐户,仪表板。帐户处理AuthUser的登录和注册。仪表板可以处理其他功能,例如Fileupload
到目前为止,我已经成功使用reverse()方法从/ accounts / login重定向到我的上传页面,但是它从/ accounts / login重定向到/ accounts / upload而不是/ dashboard / upload。
项目URL
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')
我的意图是每当用户(登录/注册),网页从/ account / login重定向到/ dashboard / upload时。
答案 0 :(得分:1)
这是因为您在帐户应用程序的网址模式中定义了上载网址。
如果要将完整路径设为 / dashboard / upload ,而不是 / accounts / upload,则应将其放置在 Dashboard 应用程序的urls.py文件中。
要进一步说明,请使用 include 函数定义路径,如下所示:
path("accounts/", include("Accounts.urls")
“帐户”应用中的所有网址都将在开头添加“ accounts /”。
注意:如果将 name 参数添加到路径,则可以在所有应用中使用它>具有反向功能。不必在要调用反向函数的应用程序中声明路径。
避免网址冲突的一个好习惯是将应用程序的名称添加到网址中。因此,您应该将上传路径命名为 dashboard_upload 。
答案 1 :(得分:0)
我遇到了同样的问题,但以下技术对我有用。
在 urls.py
应用程序的 Dashboard
文件中,使用 app_name = "Dashboard"
。然后在您的 redirect()
函数中使用 appName:Path 结构。例如,使用 redirect('Dashboard:upload')