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

时间:2019-10-12 18:09:44

标签: python django redirect url-pattern

我是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时。

2 个答案:

答案 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')