DJANGO - NoReverseMatch в /создать/

Я новичок в Django, и для получения сертификата я работаю над клонированием Википедии. Мне удалось заставить работать вики и команды редактирования, но возникли трудности с созданием новых записей. Это моя функция для создания новой записи: ** Основной urls.py**

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include("encyclopedia.urls"))
]

urls.py

from django.urls import path

from . import views

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

просмотры.py

class Post(forms.Form):
    title = forms.CharField(label= "Title")
    textarea = forms.CharField(widget=forms.Textarea(), label='')
def create(request, title):
    if request.method == "POST": 
        form = Post(request.POST)
        if form.is_valid():
            title = form.cleaned_data["title"]
            textarea = form.cleaned_data['textarea']
            entries : util.list_entries()

            if title in entries: 
                return render(request, "encyclopedia/error.html", {
                "form": Search(), 
                "message": "Page already exists", 
                "type": "exists"
                })

            else: 
                util.save_entry(title,textarea)
                page=util.get_entry(title)
                page_converted = md.convert(page)
                return render(request, "encyclopedia/create.html", {
                    "form": Search(), 
                    'page': page_converted, 
                    "title": title
                    })
    else: 
        return render(request, "encyclopedia/create.html", {
            "form": Search(), 
            "post": Post()
            
            })

МОЙ ШАБЛОН Создание новой записи

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

{% block title %}
    Create
{% endblock %}

{% block body %}
    <form method = "post" action = "{% url 'create' %}">
        {% csrf_token %}
        <h4 class = "display-2">Create new page:</h4>
        <h6 class = "post-title">Title: {{post.title}}</h6>
            {{post.textarea}}
        <br>
        <input class = "save btn btn-info" type = "submit" value = "Save"/>
    </form>
{% endblock %}

Вывести сообщение об ошибке, если страница уже существует/не найдена

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

{% block title %}
    Error
{% endblock %}

{% block body %}
<h1 class = "display-2 error">{{message}}</h1>

{% if type == "not_found" %}
<h3>The page {{title}} cannot be found.</h3>
{% endif %}
{% if type == "exists" %}
 <h3>The page {{title}} already exists.</h3>
{% endif %}
{% endblock %}

ОШИБКА, КОТОРУЮ ДЖАНГО ВОЗВРАЩАЕТ

NoReverseMatch at /create/HTML
Reverse for 'create' with no arguments not found. 1 pattern(s) tried: ['create/(?P<title>[^/]+)$']
Request Method: GET
Request URL:    http://localhost:8000/create/HTML
Django Version: 3.1.2
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'create' with no arguments not found. 1 pattern(s) tried: ['create/(?P<title>[^/]+)$']
Exception Location: /usr/local/Cellar/[email protected]/3.8.6/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/urls/resolvers.py, line 685, in _reverse_with_prefix
Python Executable:  /usr/local/bin/python
Python Version: 3.8.6
Python Path:    
['/Users/amertoukan/Desktop/Projects/cs50/Django/wiki',
 '/usr/local/Cellar/[email protected]/3.8.6/Frameworks/Python.framework/Versions/3.8/lib/python38.zip',
 '/usr/local/Cellar/[email protected]/3.8.6/Frameworks/Python.framework/Versions/3.8/lib/python3.8',
 '/usr/local/Cellar/[email protected]/3.8.6/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload',
 '/Users/amertoukan/Library/Python/3.8/lib/python/site-packages',
 '/usr/local/Cellar/[email protected]/3.8.6/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages

Что я делаю не так? См заранее спасибо.

не могли бы вы также показать свой urls.py?

ha-neul 14.12.2020 18:14

Здравствуйте, я отредактировал свой вопрос, включив в него urls.py, но вот он: from django.urls import path from . import views urlpatterns = [ path("", views.index, name = "index"), path ("wiki/<str:title>", views.entry, name = "entry"), path ("edit/<str:title>", views.edit, name = "edit"), path ("create/<str:title>", views.create, name = "create") ]

Amer 14.12.2020 18:16

и ваш основной urls.py?

ha-neul 14.12.2020 18:21

``` urlpatterns = [ path('admin/', admin.site.urls), path('', include("encyclopedia.urls")) ] ``` Я также добавлю это к вопросу

Amer 14.12.2020 18:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
356
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина в том, что когда вы создаете новую запись, у вас еще нет title.

Вы получаете заголовок и сохраняете его, чтобы отредактировать позже.

path ("create/", views.create, name = "create")

и в views.py

def create(request): # no title.

Другие вопросы по теме