【问题标题】:NoReverseMatch error happened while redirecting to another url from views.py in django从 django 中的 views.py 重定向到另一个 url 时发生 NoReverseMatch 错误
【发布时间】:2017-08-22 11:02:02
【问题描述】:

我正在尝试在注册完成后重定向用户并收到以下错误。

Reverse for 'verificationsent' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

urls.py --

urlpatterns = [
    url(r'^ciasadmin/', admin.site.urls),
    url("^$", views.homepage, name="home"),
    url(r'^account/', include('accounts.urls')),
]

accounts/urls.py --

from django.conf.urls import url
from . import views


urlpatterns = [
    url(r"^signup/$", views.signup, name="account_signup"),
    url(r'^verificationsent/$', views.verificationsent, name='account_verificationsent'),
    url(r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',views.activate, name='activate'),
]

views.py --

return redirect('verificationsent')

完整的追溯

Internal Server Error: /account/signup/
Traceback (most recent call last):
  File "C:\virtualenvs\ciasenv\lib\site-packages\django\core\handlers\exception.py", line 39, in inner
    response = get_response(request)
  File "C:\virtualenvs\ciasenv\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\virtualenvs\ciasenv\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\pyprojects\cias\ciasproj\accounts\views.py", line 41, in signup
    return redirect('verificationsent')
  File "C:\virtualenvs\ciasenv\lib\site-packages\django\shortcuts.py", line 56, in redirect
    return redirect_class(resolve_url(to, *args, **kwargs))
  File "C:\virtualenvs\ciasenv\lib\site-packages\django\shortcuts.py", line 147, in resolve_url
    return reverse(to, args=args, kwargs=kwargs)
  File "C:\virtualenvs\ciasenv\lib\site-packages\django\urls\base.py", line 91, in reverse
    return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
  File "C:\virtualenvs\ciasenv\lib\site-packages\django\urls\resolvers.py", line 392, in _reverse_with_prefix
    (lookup_view_s, args, kwargs, len(patterns), patterns)
django.urls.exceptions.NoReverseMatch: Reverse for 'verificationsent' with arguments '()' and keyword arguments '{}' not
 found. 0 pattern(s) tried: []
[22/Aug/2017 10:22:00] "POST /account/signup/ HTTP/1.1" 500 88145

我已遵循以下 SO 参考中的解决方案,但没有奏效。

Redirect with parameters. NoReverseMatch at /test/

Django NoReverseMatch in form redirect

非常感谢任何帮助。提前致谢。

【问题讨论】:

  • 我认为您打错了reverse 声明。试试reverse('account_verificationsent')

标签: python django redirect


【解决方案1】:

根据最佳实践,您不应使用直接 url 引用语句。总是reverse 网址

return redirect(reverse('account_verificationsent'))

如果您的应用程序有一个命名空间,那么您也必须反过来使用它。

【讨论】:

  • 太棒了。有效。我没有应用程序命名空间。如果我有例如 - acct 那么我应该做 return redirect(reverse('acct:account_verificationsent')) 吗?
  • 是的,你应该这样做return redirect(reverse('acct:account_verificationsent'))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 2018-10-21
  • 2017-03-14
  • 1970-01-01
相关资源
最近更新 更多