VIEWS.PY from django.shortcuts import render from django.shortcuts import redirect from django.urls import reverse from django.http import HttpResponseRedirect from django import forms import markdown2 from . import util class AddPageForm(forms.Form): title = forms.CharField(max_length=20) content = forms.CharField(widget=forms.Textarea( attrs={ "class": "form-control", "placeholder": "Tell us more!" }) ) def add_page(request): if request.method == "POST": form = AddPageForm(request.POST) entries = util.list_entries() if form.is_valid(): title = form.cleaned_data['title'] content = form.cleaned_data['content'] util.save_entry(title, content) for entry in entries: if title.upper() == entry.upper(): return render(request, "encyclopedia/errorpage.html") else: return HttpResponseRedirect(reverse('encyclopedia:entrypage')) else: return render(request, "encyclopedia/addpage.html", { "form": AddPageForm() })URLS.PY
app_name = "encyclopedia" urlpatterns = [ path("", views.index, name="index"), path("wiki/<str:title>", views.entry_page, name="entrypage"), path("search", views.search, name="search"), path("add_page", views.add_page, name="addpage"), ]AGREGAR PÁGINA.HTML
<form action="{% url 'encyclopedia:addpage' %}" method="post"> {% csrf_token %} {{ form }} <input type="submit" value="Submit" class="btn btn-secondary"> </form>DISEÑO.HTML
<div> <a href="{% url 'encyclopedia:addpage' %}">Create New Page</a> </div> <div>He intentado actualizar las direcciones URL y las vistas, pero sigo recibiendo respuestas de error.
path("add_page/<str:title>", views.add_page, name="addpage"), def add_page(request, title):Indique de dónde podría provenir esta respuesta de error, ya que las ediciones anteriores son lo que vi en algunas otras respuestas de stackoverflow para borrar el error, pero esto no funcionó para mí.
Gracias
Cuando realiza una redirección a la página de entrypage , debe especificar el título, por lo que:
from django.shortcuts import redirect def add_page(request): if request.method == "POST": form = AddPageForm(request.POST) entries = util.list_entries() if form.is_valid(): title = form.cleaned_data['title'] content = form.cleaned_data['content'] util.save_entry(title, content) for entry in entries: if title.upper() == entry.upper(): return render(request, "encyclopedia/errorpage.html") # specify title ↓ return redirect('encyclopedia:entrypage' , title=title ) # … También recomendaría encarecidamente utilizar una base de datos y no obtener todas las entradas de la utilidad: una base de datos está optimizada para buscar de manera efectiva, mientras que acceder a la lista de archivos lleva un tiempo lineal para buscar. Si define un modelo de base de datos, puede agregar db_index=True [Django-doc] para crear un índice que puede impulsar enormemente la búsqueda.