django Djange NoReverseMatch错误- reverse for 'edit' with no arguments not found

kuarbcqp  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(97)

在我为一个课程构建的Django应用程序中,我试图通过url路径将一个参数从一个模板传递到views.py中的一个函数。
urls.py中的路径定义包含参数名称,views.py中的函数也需要相同的名称。
我的模板中的链接指向正确的url路径并为参数命名了一个值,但我仍然收到一个NoReverseMatch错误。奇怪的是,我有另一个需要参数的URL路径,它工作得很好。

entry.html这里是urls.py中名为edit的路径的链接。我想将变量entryTitle的值作为entry传递给url:

{% extends "encyclopedia/layout.html" %}

{% block title %}
    {{ entryTitle }}
{% endblock %}

{% block body %}

    {{ entry|safe }}

    <button>
        <a href="{% url 'edit' entry=entryTitle %}">Edit Entry</a>
    </button>

{% endblock %}

字符串

urls.pyedit路径是urlpatterns中定义的最后一个路径

from django.urls import path

from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("wiki/<str:entry>", views.entry, name="entry"),
    path("search", views.search, name="search"),
    path("new", views.new_page, name="new"),
    path("wiki/edit/<str:entry>", views.edit, name="edit")
]

views.py这是编辑函数,需要entry作为参数UPDATE:还示出了输入功能

class EditPageForm(forms.Form):
    content = forms.CharField(
        widget=forms.Textarea(),
        label="Edit Content:")

def edit(request, entry):
    if request.method == "POST":
        #Edit file and redirect
        form = EditPageForm(request.POST)
        if form.is_valid():
            content = form.cleaned_data["content"]
            util.save_entry(entry, content)
            return HttpResponseRedirect(reverse('entry', kwargs={'entry': entry}))
    else:
        #Load form with initial values filled
        content = util.get_entry(entry)
        form = EditPageForm(initial={"content": content})
        return render(request, "encyclopedia/edit.html", {
           "editform": form,
            "entryTitle": entry
        })

def entry(request, entry):
    markdowner = Markdown()
    entryPage = util.get_entry(entry)
    if entryPage is None:
        return render(request, "encyclopedia/notfound.html", {
            "entryTitle": entry
                      })
    else:
        return render(request, "encyclopedia/entry.html", {
            "entry": markdowner.convert(entryPage),
            "entryTitle": entry
        })


单击entry.html中的链接会出现以下错误:

NoReverseMatch at /wiki/edit/HTML
Reverse for 'edit' with no arguments not found. 1 pattern(s) tried: ['wiki/edit/(?P<entry>[^/]+)$']


如果我在服务器上的entry.html上查看页面源代码,该链接似乎正确地呈现了路径,并显示了entryTitle的正确值,我认为这意味着模板和urls.py之间一定发生了一些通信,但当单击链接时找不到路径。
下面是entry.html的'view page source',entryTitle包含的值为“HTML”:

<button>
        <a href="/wiki/edit/HTML">Edit Entry</a>
    </button>


有没有人看到我的代码有什么问题,或者有什么好的解决方法?我在这件事上纠结了几天。谢谢你的好意
UPDATE这里是edit.html模板:

{% extends "encyclopedia/layout.html" %}

{% block title %}
    Edit Entry
{% endblock %}

{% block body %}
    <h2>Edit encyclopedia entry for {{ entryTitle }}</h2>
    <form action="{% url 'edit' %}" method="POST">
        {% csrf_token %}
        {{ editform }}
        <input type="submit" value="Update">
    </form>
        
{% endblock %}

kr98yfug

kr98yfug1#

您需要提供标题作为参数。

{% extends "encyclopedia/layout.html" %}

{% block title %}
    Edit Entry
{% endblock %}

{% block body %}
    <h2>Edit encyclopedia entry for {{ entryTitle }}</h2>
    <form action="{% url 'edit' entryTitle %}" method="POST">
        {% csrf_token %}
        {{ editform }}
        <input type="submit" value="Update">
    </form>
        
{% endblock %}```

字符串

相关问题