在视图中重定向找不到 url 路径或 html 模板

问题描述 投票:0回答:1

我试图从一个视图重定向到另一个视图或网址名称,但无论我使用哪种类型的重定向,都会出现错误。我的偏好是使用视图名称以避免对 url 进行硬编码。

涉及的相关视图片段:

主视图片段

        if form.is_valid():
            """ check if passwords match """
            print('form is valid')
            password1 = form.cleaned_data.get('password1')
            password2 = form.cleaned_data.get('password2')
            if password1 and password2 and password1 != password2:
                raise messages.add_message(request, messages.error, "Passwords don't match")
                return redirect('/members:new_profile')

            """ create user, set hashed password, redirect to login page """
            print('creating user')
            user = form.save(commit=False)
            user.set_password(password1)
            user.save()
            return redirect('members:user_login')

用户登录视图

def UserLogin(request):
    """ Member authenticate, set session variables and login """
    if request.method == 'POST':
        username = request.POST.get('email')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                """ set session expiry and variables with login"""
                login(request, user)
                request.session.set_expiry(86400)
                watchlist_items = Watchlist.objects.filter(created_by_id=user.id, status=True).values_list('listing_id', flat=True)
                print(f"watchlist_items: {watchlist_items}")
                if watchlist_items:
                    request.session['watchlist'] = list(watchlist_items)
                    print(f"watchlist session variable: {request.session['watchlist']}")
                    messages.add_message(request, messages.success, 'You have successfully logged in')
                else:
                    request.session['watchlist'] = []
                    messages.add_message(request, messages.success, 'You have successfully logged in')
                return redirect('general/dashboard.html')
            else:
                """ user has old account, prompt to reactivate and pay new subscription """
                messages.add_message(request, messages.error, 'This account is no longer active, please reactivate '
                                                           'account (subscription required)')
                return redirect('members/member_login.html')
        else:
            messages.add_message(request, messages.error, 'Username or password is incorrect')
            return redirect('members/member_login.html')
    else:
        return redirect('members/member_login.html')

成员/urls.py

from django.urls import path
from members import views

app_name = 'members'

urlpatterns = [
    path('new_profile/', views.NewUserCreate, name='new_profile'),
    path('user_login/', views.UserLogin, name='user_login'),
    path('user_logout/', views.UserLogout, name='user_logout'),
]

项目级别 urls.py

urlpatterns = [
    path('accounts/', include('django.contrib.auth.urls')),
    path('', include('general.urls')),
    path('members/', include('members.urls')),
    path("__debug__/", include("debug_toolbar.urls")),
]

在主视图代码中,我尝试了以下不同问题:

返回 HttpResponseRedirect(reverse('members:user_login'))

返回重定向('user_login') - /members/new_profile/ 处出现 NoReverseMatch 错误

返回重定向('members:user_login') - 页面未找到错误,列出网址为 http://127.0.0.1:8000/members/user_login/members/member_login.html

返回重定向('/members:user_login') - 页面未找到错误,尝试 url http://127.0.0.1:8000/members:user_login

我知道这应该是一件简单的事情,我已经重定向到其他视图,无法在这里找出最佳解决方案,任何帮助将不胜感激。

django django-views
1个回答
0
投票

在您的代码中,我发现您编写重定向的方式存在问题。正确的语法是:

return redirect('app_name:url_name')

并且您还尝试重定向到 user_login 视图中的 HTML 页面,这是不可能的,相反您必须像这样渲染 HTML 页面

return render(request, 'members/member_login.html')

附加信息

我注意到你用 CamelCase 写了视图名称,这是不正确的,而你必须用 Snake_case 写

我希望这对您有所帮助。 快乐编码。

© www.soinside.com 2019 - 2024. All rights reserved.