Python Django NoReverseMatch在重定向到视图时

Python Django NoReverseMatch在重定向到视图时,python,django,redirect,views,django-urls,Python,Django,Redirect,Views,Django Urls,正确登录后,我想将用户重定向到另一个页面,因此我使用重定向,但我得到一个NoReverseMatch错误 Reverse for 'watchfilms' with arguments '()' and keyword arguments '{}' not found. 我不知道出了什么问题,所以我向您展示了我的url.py和views.py文件。也许你看到了什么不对劲 项目的url.py urlpatterns = patterns('', url(r'^films/', inclu

正确登录后,我想将用户重定向到另一个页面,因此我使用重定向,但我得到一个NoReverseMatch错误

Reverse for 'watchfilms' with arguments '()' and keyword arguments '{}' not found.
我不知道出了什么问题,所以我向您展示了我的url.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视图,但它看起来似乎找不到(我不明白为什么,我认为url.py是可以的).

该函数将模型、视图或绝对或相对url作为输入

然而,Django抱怨它找不到给定参数的任何URL

最好的方法可能是向view函数传递一个引用,这样,如果以后更改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(watchFilms)
                    else:
                            error = 'Error while login!'
            else:
                    errorea = 'Data is not correct!'
    return render(request, 'films/login.html', {'error': error})
def登录(请求):
error=“”
username=request.POST.get('username',False)
passw=request.POST.get('password',False)
用户=验证(用户名=用户名,密码=密码)
如果用户名或密码为:
如果用户不是无:
如果user.u处于活动状态:
登录(请求、用户)
返回重定向(观看电影)
其他:
error='登录时出错!'
其他:
errorea='数据不正确!'
返回渲染(请求'films/login.html',{'error':error})

请不要使用名为
pass
的变量
pass
是一个Python关键字,解释器通常会在这方面出错。

如果要反转url模式,您应该命名它:

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

确保大写字母与
redirect()
调用中的大写字母相同(即全部小写)。

为url模式中的每个url添加一个名称!谢谢谢谢回答,我将更改变量的名称