Редирект в представлении не находит путь к url или шаблон html

Я пытаюсь перенаправить с одного представления на другое представление или имя url, но получаю ошибки независимо от того, какой тип перенаправления я использую. Я предпочитаю использовать имя представления, чтобы избежать жесткого кодирования 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')

members/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')))

return redirect('user_login') - ошибка NoReverseMatch at /members/new_profile/

return redirect('members:user_login') - ошибка Page not found, url указан как http://127.0.0.1:8000/members/user_login/members/member_login.html

return redirect('/members:user_login') - ошибка страницы не найдена, попытка url http://127.0.0.1:8000/members:user_login

Я знаю, что это должно быть просто сделать, и у меня есть редиректы, работающие для других видов, не могу найти лучшее решение здесь, любая помощь будет оценена по достоинству.

В вашем коде я обнаружил проблему в том, как вы написали редирект. Правильный синтаксис таков:

return redirect('app_name:url_name')

и также вы пытаетесь перенаправить на HTML-страницу в представлении user_login, что невозможно, вместо этого вы должны отобразить HTML-страницу следующим образом

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

Дополнительная информация

Я заметил, что вы написали имя представления в CamelCase, что неправильно, вместо этого вы должны писать в snake_case

Надеюсь, это было полезно для вас. Счастливого кодинга.

Вернуться на верх