django命名组url中的NoReverseMatch异常

时间:2014-07-17 16:42:42

标签: python django django-views django-urls django-1.7

我是django的新手并且正在玩网址并坚持这个问题, 我在我的views.py中有一个视图,它反转了不同视图的网址

def index(request):
  username = request.session.get('username')
  if username is None:
    return HttpResponseRedirect(reverse('login_page'))
    #return HttpResponse("Testing view session not found")
  else:
    return HttpResponseRedirect(reverse('profile_page', kwargs = {'username': username,}))
    #return HttpResponse("Testing view " + username)

现在,当else不是username时代码将到达None阻止,所以这是我的URLconf

urlpatterns = patterns('',
    url(r'(?P<username>^)', views.profile, name = "profile_page"),)

所以用简单的话说我正在调用profile_page url,它使用的是命名参数用户名,我从kwargs传递了相同的内容,但是我收到NoReverseMatch的异常消息:< / p>

  

使用参数'()'和关键字参数'{'username':'dheerendra'}'找不到'profile_page'的反转。尝试了1种模式:['user /(?P ^)']

2 个答案:

答案 0 :(得分:0)

要构建profile_page网址,需要username完全填写。你在没有在kwargs中传递用户名的情况下调用reverse('profile_page')

答案 1 :(得分:0)

两件事:

  • 您已经为该网址指定了一个名为username的网址,但您实际上并没有为该指定网址提供正则表达式。您希望username正则表达式匹配不同长度的用户名,因此您需要:

    url(r'?P<username>\w+)/$', views.profile, name="profile_page"),

    其中\w+是正则表达式

  • 其次,正如您将从上面的检查中看到的那样,您需要使用$终止正则表达式,以便/myusername/otherstring/之类的网址不会错误地匹配< / p>