Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Reverse for 'entrypage' with no arguments not found. 1 pattern(s) tried: ['wiki/(?P<title>[^/]+)$']

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"),
]

ADDPAGE.HTML

        <form action="{% url 'encyclopedia:addpage' %}" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Submit" class="btn btn-secondary">
    </form>

LAYOUT.HTML

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

                <div>
                <a href="{% url 'encyclopedia:addpage' %}">Create New Page</a>
            </div>
            <div>

I have tried updating the urls and the views to this but i keep getting error responses

    path("add_page/<str:title>", views.add_page, name="addpage"),
    def add_page(request, title):

Please advise where this error response could be coming from as the above edits is what i saw in some other stackoverflow responses to clear the error but this didn’t work for me.

Thank you

>Solution :

When you make a redirect to entrypage, you need to specify the title, so:

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)
    # …

I would also strongly advise to make use of a database, and not fetch all entries from the utility: a database is optimized to search effective, whereas accessing the list of files takes linear time to search. If you define a database model, you can add db_index=True [Django-doc] to build an index which can boost searching enormously.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading