Django Form не отображается, выдает ошибку о невозможности сопоставления урлов
В Django я пытаюсь отобразить форму для редактирования содержимого на странице. Однако я сталкиваюсь со следующей ошибкой при попытке посетить представление editpage
NoReverseMatch at /editpage/CSS/ Reverse for 'editpage' with keyword arguments '{'topic': ''}'' не найден. Проверен 1 шаблон(ы): ['editpage\/(?P[^/]+)\/$']
.
Здесь "CSS" - это пример, взятый из адреса ссылки через str:topic в urls.py.
Я думаю, что проблема связана с действием моей формы в editpage.html, где я ссылаюсь на url editpage, и я пробовал множество комбинаций, но не могу заставить его отображаться. Удаление формы позволяет отображать ссылку без ошибок. Любая помощь будет очень признательна.
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()
})
Заранее спасибо!
Попробуйте это. Проблема в том, что вы забыли передать тему внутри контекста и, насколько я вижу, вы неправильно обрабатываете форму (вам нужно сделать GET
и POST
для обработки формы). Если вам нужна дополнительная помощь по этому вопросу, дайте мне знать.
def editpage(request, topic):
return render(request, "encyclopedia/editpage.html", {"form": EditPageForm(),"topic":topic})
Проблема заключается в том, что вы перехватываете ввод из браузера, используя urls.py
path("editpage/str:topic/", views.editpage, name="editpage"),
чем это (str:topic) приходящая editpage фунция внутри urls.py файла. Но вы не отправляете его (str:topic) вашей форме editpage.html. Поэтому база данных не понимает, что ведьма title нужна вам.
вам нужно измениться :-
views.py
def editpage(request, topic):
return render(request, "encyclopedia/editpage.html", {"form": EditPageForm()
,"topic":topic})
еще один совет :-
Если вы используете {{ form.as_p }} внутри вашего editpage.html, это будет выглядеть лучше