django 中的 AddPage 函数创建一个新页面但不重定向到它 - NoReverseMatch 错误

问题描述 投票:0回答:1

我正在尝试创建一个函数,该函数将在维基百科网站中创建新条目。到目前为止,我拥有的代码将进行输入(即,如果您通过表单来创建页面,它将显示在主屏幕上的页面列表中),但当您点击提交时,不会将您带到该页面,它向我显示 NoReverseMatch 错误。它说“找不到‘entry’的反向。‘entry’不是有效的视图函数或模式名称。”

我需要它做的就是重定向到新页面,但我不明白为什么它说条目不是有效的视图函数?我有一个名为条目的函数来保存以前的条目,但我在连接问题时遇到了问题。

观点.PY

def entry(request, title):
    html_content = convert_md_to_html(title)
    if html_content == None:
        return render(request, "encyclopedia/error.html", {
            "message": "This entry does not exist."
        })
    else:
        return render(request, "encyclopedia/entry.html", {
            "title": title,
            "content": html_content
        }) 


class AddPageForm(forms.Form):
    title = forms.CharField()
    content = forms.CharField(widget=forms.Textarea(
        attrs={
            "class": "form-control",
        }))

def add_page(request):
    form = AddPageForm() # <- called at GET request
    if request.method == "POST":
        form = AddPageForm(request.POST) # <- called at POST request
    
    if form.is_valid():
        title = form.cleaned_data['title']
        content = form.cleaned_data['content']
        entries = util.list_entries()
        for entry in entries:
            if title.upper() == entry.upper():
                return render(request, "encyclopedia/error.html")
        util.save_entry(title, content)
        return redirect('entry', title=title) 
    else:
        return render(request, "encyclopedia/addpage.html", {
            "form": AddPageForm()
        })

URLS.PY

app_name = "encyclopedia"

urlpatterns = [
    path("", views.index, name="index"),
    path("entry/<str:title>/", views.entry, name="entry"),
    path("search/", views.search, name="search"),
    path("add_page", views.add_page, name="addpage"),
    path("edit_page/<str:title>", views.edit_page, name="editpage"),
    path("random_page/", views.random_page, name="random"),
]

添加页面.HTML

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

{% block title %}
    Encyclopedia
{% endblock %}

{% block body %}
    <h1>New Page</h1>
        <form action="{% url 'encyclopedia:addpage' %}" method="post">
            {% csrf_token %}
            {{ form }}
            <input type="submit" value="submit" class="btn btn-secondary">
        </form>

{% endblock %}

实用程序.PY

def list_entries():
    """
    Returns a list of all names of encyclopedia entries.
    """
    _, filenames = default_storage.listdir("entries")
    return list(sorted(re.sub(r"\.md$", "", filename)
                for filename in filenames if filename.endswith(".md")))
python django cs50
1个回答
0
投票

您应该在添加页面功能中使用反向来进行重定向。

示例代码:

  1. 导入反向

    从 django.urls 反向导入

  2. 使用反向网址重定向

    返回重定向(反向('entry',kwargs = {'title':title}))

您可以在此处阅读更多有关反向的信息

© www.soinside.com 2019 - 2024. All rights reserved.