【问题标题】:Django Form does not display, gives error that it is unable to match urlsDjango Form 不显示,给出无法匹配 url 的错误
【发布时间】:2021-12-20 13:02:00
【问题描述】:

使用 Django,我试图显示一个表单来编辑页面上的内容。但是我在尝试访问编辑页面视图时遇到了以下错误

NoReverseMatch 在 /editpage/CSS/ 未找到关键字参数“{'topic':''}' 的“editpage”的反向操作。尝试了 1 种模式:['editpage\/(?P[^/]+)\/$']

这里的“CSS”是通过 urls.py 中的 str:topic 从链接地址中提取的示例。

我认为问题在于我在 editpage.html 中的表单操作,我在其中引用了 editpage url,我尝试了多种组合,但无法显示。删除表单允许链接显示没有错误。非常感谢任何帮助。

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path("editpage/<str:topic>/", views.editpage, name="editpage"),
]

editpage.html

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

{% block title %}
    Edit Page
{% endblock %}

{% block body %}
    <h1>Edit page</h1>

    <form action="{% url 'editpage' topic=topic %}" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="submit">    
    </form>

{% endblock %}

views.py

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from django import forms
from . import util

class EditPageForm(forms.Form):
    title = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'topic', 'class': 'form-control'}))
    article = forms.CharField(widget=forms.Textarea(attrs={'placeholder': 'Existing article', 'class': 'form-control'}))

def editpage(request, topic):  
    return render(request, "encyclopedia/editpage.html", {"form": EditPageForm()
    })

提前谢谢你!

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    问题是您使用 urls.py 从浏览器捕获输入

    path("editpage/str:topic/", views.editpage, name="editpage"),

    urls.py 文件中的 editpage 功能是 (str:topic)。但是您没有将它 (str:topic) 您的 editpage.html 表单发送。这就是为什么数据库不理解女巫 title 需要你。

    你需要改变:-

    views.py

    def editpage(request, topic):  
        return render(request, "encyclopedia/editpage.html", {"form": EditPageForm()
        ,"topic":topic})
    

    还有一条建议:-

    如果您在 editpage.html 中使用 {{ form.as_p }} 会更好

    【讨论】:

    • 谢谢比斯瓦吉特!
    【解决方案2】:

    试试这个。问题是你忘记在上下文中传递主题,从我看来你没有正确处理表单(你必须制作 GETPOST 来处理表单) .如果您需要更多帮助,请告诉我。

    def editpage(request, topic):  
        return render(request, "encyclopedia/editpage.html", {"form": EditPageForm(),"topic":topic})
    

    【讨论】:

    • 谢谢阿马杜!是的,它现在有效。我还将构建适当的表单处理。祝您有美好的一天!
    • @cjuggler 我很高兴能帮到你。
    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 2017-01-04
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2014-05-19
    相关资源
    最近更新 更多