Я новичок в 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, но вот он: 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") ]
и ваш основной urls.py?
``` urlpatterns = [ path('admin/', admin.site.urls), path('', include("encyclopedia.urls")) ] ``` Я также добавлю это к вопросу
Причина в том, что когда вы создаете новую запись, у вас еще нет title
.
Вы получаете заголовок и сохраняете его, чтобы отредактировать позже.
path ("create/", views.create, name = "create")
и в views.py
def create(request): # no title.
не могли бы вы также показать свой urls.py?