【问题标题】:Django can't resolve a url nameDjango 无法解析 url 名称
【发布时间】:2014-11-11 14:37:22
【问题描述】:

我是 Django 的新手。

代码似乎无法解析我的“登录”网址,我需要您的帮助才能继续我的开发。

以下是我得到的异常:

Environment:


Request Method: GET
Request URL: http://localhost:9999/bz/logout/

Django Version: 1.7
Python Version: 3.4.1
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'bz')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "D:\Python34\lib\site-packages\django\core\handlers\base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\dev\python\eli\bz\views.py" in user_logout
  102.     return HttpResponseRedirect(reverse('login'), {'logged_out_success_message': user.username + " logged out successfully"})
File "D:\Python34\lib\site-packages\django\core\urlresolvers.py" in reverse
  546.     return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "D:\Python34\lib\site-packages\django\core\urlresolvers.py" in _reverse_with_prefix
  463.                              (lookup_view_s, args, kwargs, len(patterns), patterns))

Exception Type: NoReverseMatch at /bz/logout/
Exception Value: Reverse for 'login' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

这是我的 urls.py:

from django.conf.urls import patterns, url

from bz import views

urlpatterns = patterns('',
  (r'^$', views.index),
  url(r'^login/$', views.user_login, name='login'),
  (r'^logout/$', views.user_logout),
  (r'^register/$', views.register),
  )

这是解决失败的问题部分:

def user_logout(request):
  user = request.user
  if user.is_authenticated:
    logout(request)
    return HttpResponseRedirect(reverse('login'), {'logged_out_success_message': user.username + " logged out successfully"})
  else:
    return render(request, 'bz/index.html', {})

您的帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: python django url django-views


    【解决方案1】:

    各位,发现问题了。 使用“反向”时,我忘记添加应用程序的名称。 所以下面的技巧就成功了。

    代替:

    return HttpResponseRedirect(reverse('login'), {'logged_out_success_message': user.username + " logged out successfully"})
    

    我写了(添加'bz:'作为前缀):

    return HttpResponseRedirect(reverse('bz:login'), {'logged_out_success_message': user.username + " logged out successfully"})
    

    现在它可以工作了。 谢谢。

    【讨论】:

    • 编写自己的登录和注销函数的原因是什么?您可以轻松地使用装饰器 @login_required 并在您的 urls.py 中包含来自 django.contrib.auth.views 的模式。
    • 好吧,因为我使用的是扩展的 USerProfile 模型,所以用户登录就足够了,因为用户的存在及其成功登录不会自动验证该用户是否也与 UserProfile 相关联。
    猜你喜欢
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2017-05-30
    • 2020-05-01
    • 2016-06-23
    • 1970-01-01
    • 2022-12-11
    相关资源
    最近更新 更多