【问题标题】:Cannot fix Django NoReverseMatch error despite URL being withing urls.py尽管 URL 带有 urls.py,但无法修复 Django NoReverseMatch 错误
【发布时间】:2025-11-27 23:15:02
【问题描述】:

在我详细介绍之前,这里是 html 文档中导致错误的行,以及 views.py 和 urls.py:

<input class="search" type="text" name="q" placeholder="Search Encyclopedia" action="{% url 'encyclopedia:findpage' %}" method="get">

(是的,url'encyclopedia:findpage' 之间有一个空格)

views.py 查找页面函数:

def findpage(request, name):
    pages = util.list_entries()
    wanted_pages = set()
    wanted_page = None

    for page in pages:
        if not wanted_page and page == name:
            wanted_page = util.get_entry(name)
            continue

        if name in page:
            wanted_pages.add(page)

    if wanted_page:
        return render(request, 'encyclopedia/page.html', {
            "title": name,
            "entry": wanted_page
            })

    if wanted_pages and not wanted_page:
        return render(request, 'encyclopedia/index.html', {
            "entries": wanted_pages
        })

    else:
        return render(request, 'encyclopedia/noresults.html')

urls.py:

from django.urls import path

from . import views

app_name = "encyclopedia"
urlpatterns = [
path("", views.index, name="index"),
path("<str:name>", views.wikipage, name="wikipage"),
path("<str:name>", views.findpage, name='findpage'),
path("create", views.newpage, name="newpage")

]

当我运行 Django 项目时,我在 / 处得到一个 NoReverseMatch。来自网页的错误内容如下: In template /home/quinn/Desktop/cs50web/pset1/wiki/encyclopedia/templates/encyclopedia/layout.html, error at line 17 Reverse for 'findpage' with no arguments not found. 1 pattern(s) tried: ['(?P&lt;name&gt;[^/]+)$']

第 17 行是我留在本页顶部的一段 html。我已经检查了许多来源以试图解决这个问题,但我无法弄清楚。

【问题讨论】:

  • 它需要一个 name 值,所以{% url 'encyclopedia:findpage' name='myname' %}
  • 谢谢。我想我可以做到{% url ‘encyclopedia:findpage’ name={{ form.field.value|default_if_none:”” }}
  • 这是不可行的,因为模板是由模板引擎渲染的之前结果被传递给浏览器。
  • 哦。然后我想我可以从视图文件中访问表单数据,然后将其作为上下文传递?还是不行??

标签: python django


【解决方案1】:

您需要指定一个名称,因为您的网址在这里需要它:

path("<str:name>", views.findpage, name='findpage')

您可以像这样在模板的 url 标签中指定 kwargs:

{% url 'reverse:lookup' kwarg='insert here the value that needs to get passed in your url' %}

【讨论】:

    最近更新 更多