You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django表单渲染results页面遇NoReverseMatch错误求助

解决Django表单提交后NoReverseMatch找不到'results'视图的问题

嘿,我来帮你排查这个问题!你遇到的NoReverseMatch错误是Django里常见的URL配置问题,加上你的results视图还有个小bug,我给你一步步说明怎么修复:

1. 核心问题:URL命名空间未正确使用

你在mapping_twitter/urls.py里设置了app_name = 'mapping_twitter',这就给这个应用的URL加上了专属命名空间。当你用reverse()生成跳转URL时,必须带上这个命名空间,否则Django无法区分不同应用下同名的视图。

修复代码(views.py):
把search_query函数里的反向解析代码修改一下:

# 原来的代码
# return HttpResponseRedirect(reverse('results'))

# 修改后的代码
return HttpResponseRedirect(reverse('mapping_twitter:results'))

2. 次要问题:results视图未定义form变量

你的results视图中尝试把form变量传入模板,但这个视图里根本没有定义form,运行起来会触发NameError。

修复代码(views.py):
如果结果页面需要显示表单,就初始化一个空表单;不需要的话直接去掉这个变量:

def results(request):
    # 初始化空表单(如果需要的话)
    form = SearchQueryForm()
    context = {'form': form}
    return render(request, 'mapping_twitter/results.html', context)

# 或者不需要表单的话简化成:
# def results(request):
#     return render(request, 'mapping_twitter/results.html', {})

验证URL结构

最后确认下你的URL层级是正确的:

  • 根URL配置把/search_query/指向mapping_twitter的URLs
  • mapping_twitter里的results/路径对应results视图,所以完整的结果页面URL是/search_query/results/,加上命名空间后reverse就能正确生成这个地址了。

附原始问题信息:

错误信息

NoReverseMatch at /search_query/ 
Reverse for 'results' not found. 'results' is not a valid view function or pattern name. 
Request Method: POST 
Request URL: http://ozxlitwi.apps.lair.io/search_query/ 
Django Version: 2.0 
Exception Type: NoReverseMatch 
Exception Value: Reverse for 'results' not found. 'results' is not a valid view function or pattern name. 
Exception Location: /mnt/data/.python-3.6/lib/python3.6/site-packages/django/urls/resolvers.py in _reverse_with_prefix, line 632 
Python Executable: /mnt/data/.python-3.6/bin/python 
Python Version: 3.6.5 
Python Path: ['/mnt/project', '/mnt/data/.python-3.6/lib/python36.zip', '/mnt/data/.python-3.6/lib/python3.6', '/mnt/data/.python-3.6/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6', '/mnt/data/.python-3.6/lib/python3.6/site-packages'] 
Server time: Fri, 1 Jun 2018 10:00:20 +0900

views.py代码

def search_query(request): 
    # If POST request, process the Form data: 
    if request.method == 'POST': 
        # Create a form instance and populate it with the data from the request (binding): 
        form = SearchQueryForm(request.POST) 
        # Check if the form is valid: 
        if form.is_valid(): 
            form.save() 
            return HttpResponseRedirect(reverse('results')) 
    else: 
        form = SearchQueryForm() 
    context = {'form':form} 
    return render (request, 'mapping_twitter/search_query.html', context) 

def results(request): 
    context = {'form':form} 
    return render(request, 'mapping_twitter/results.html', context)

mapping_twitter/urls.py代码

from django.urls import path 
from . import views 

app_name = 'mapping_twitter' 
urlpatterns = [ 
    path('', views.search_query, name='search-query'), 
    path('results/', views.results, name='results'), 
]

mapping_data/urls.py代码

urlpatterns = [ 
    path('search_query/', include('mapping_twitter.urls')), 
    path('admin/', admin.site.urls), 
    path('', RedirectView.as_view(url='/search_query', permanent=True)), 
]

mapping_twitter/results.html代码

<!--- DRAFT ---> 
Display search results here

内容的提问来源于stack exchange,提问作者user9330449

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:59:33