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, это будет выглядеть лучше

Вернуться на верх