我有一个非常简单的带有表单的 Django 应用程序。表单经过验证后,它应该重定向到应用程序的起始页。我收到以下错误:
django.urls.exceptions.NoReverseMatch: Reverse for 'overview' not found.
'overview' is not a valid view function or pattern name.
urls.py中的相关路径是:
urlpatterns = [
path('overview', views.overview, name='overview'),
...]
该 View 与重定向 View 位于同一views.py中:
def overview(request):
...
return render(request, 'feedback/overview.html', context)
带有重定向调用的 View 如下所示:
def make_submission(request):
if request.method == 'POST':
form = FeedbackForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.approved = False
post.save()
return redirect('overview')
else:
form = FeedbackForm()
return render(request, 'feedback/make_submission.html', {'form': form})
表单数据保存在数据库中,但重定向失败。我做错了什么?
编辑:
这是主要的 urls.py。这与我在这里使用 url() 而不是 path() 有什么关系吗?我目前正在将整个 shebang 迁移到 Django 2.1。
from django.conf.urls import include,url
from django.contrib import admin
urlpatterns = [
url(r'^$', include('main.urls')),
url(r'^main/', include('main.urls')),
url(r'^feedback/', include('feedback.urls')),
url(r'^admin/', admin.site.urls),
]
最佳答案
您的异常来自 here :
if patterns:
if args:
arg_msg = "arguments '%s'" % (args,)
elif kwargs:
arg_msg = "keyword arguments '%s'" % (kwargs,)
else:
arg_msg = "no arguments"
msg = (
"Reverse for '%s' with %s not found. %d pattern(s) tried: %s" %
(lookup_view_s, arg_msg, len(patterns), patterns)
)
else:
msg = (
"Reverse for '%(view)s' not found. '%(view)s' is not "
"a valid view function or pattern name." % {'view': lookup_view_s}
)
这意味着 Django 甚至无法找到您的 url 来尝试反向访问它。因此,您可能错误地将其包含在核心应用程序的 urls.py 中,以尝试引用它。也许fxgx的评论是正确的。
关于python - Django 重定向无法解析 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51679962/