Django NoReverseMatch при перенаправлении на просмотр - PullRequest
0 голосов
/ 10 мая 2018

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

Reverse for 'watchfilms' with arguments '()' and keyword arguments '{}' not found.

Я не знаю, что происходит, поэтому япоказывая вам мои файлы urls.py и views.py.Может быть, вы видите что-то не так ...

url.py проекта

urlpatterns = patterns('',
    url(r'^films/', include('films.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

url.py приложения

urlpatterns = patterns('',
    url(r'^$', 'films.views.index'),
    url(r'^signup$', 'films.views.signUp'),
    url(r'^login$', 'films.views.logIn'),
    url(r'^signedupok$', 'films.views.signedUpOk'),
    url(r'^watchfilms$', 'films.views.watchFilms'),
    url(r'^logout$', 'films.views.logout'),
)

views.py

...

def logIn(request):
    error = ""
    username = request.POST.get('username', False)
    pass = request.POST.get('password', False)
    user = authenticate(username = username, password = pass)
    if username or pass:
            if user is not None:
                    if user.is_active:
                            login(request, user)
                            return redirect('watchfilms')
                    else:
                            error = 'Error while login!'
            else:
                    errorea = 'Data is not correct!'
    return render(request, 'films/login.html', {'error': error})

@login_required
def watchFilms(request):
    film_list = Film.objects.all()
    paginator = Paginator(film_list, 3)
    page = request.GET.get('page')
    try:
            films = paginator.page(page)
    except PageNotAnInteger:
            films = paginator.page(1)
    except EmptyPage:
            films = paginator.page(paginator.num_pages)
    return render(request, 'films/watchFilms.html', {'films': films})

...

Как только логин в порядке, должно быть вызвано представление watchFilms, но похоже, что его невозможно найти (почему я не понимаю, я думаю, что urls.py в порядке) ...

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вы должны назвать свой шаблон URL, если вы хотите изменить его:

url(r'^watchfilms$', 'films.views.watchFilms', name='watchfilms'),

Убедитесь, что заглавные буквы такие же, как в вашем вызове redirect() (т. Е. Все строчные буквы).

0 голосов
/ 10 мая 2018

Функция redirect принимает в качестве входных данных модель, вид или абсолютный или относительный URL.

Однако Django жалуется, что не может найти URL для данного параметра.

Вероятно, лучше всего передать ссылку на функцию представления, чтобы при последующем изменении URL она все равно работала:

def logIn(request):
    error = ""
    username = request.POST.get('username', False)
    passw = request.POST.get('password', False)
    user = authenticate(username = username, password=passw)
    if username or passw:
            if user is not None:
                    if user.is_active:
                            login(request, user)
                            return redirect(<b>watchFilms</b>)
                    else:
                            error = 'Error while login!'
            else:
                    errorea = 'Data is not correct!'
    return render(request, 'films/login.html', {'error': error})

Пожалуйста, не используйте переменную с именем pass. pass является ключевым словом Python, и обычно интерпретатор выдаст ошибку при этом.

...