Как мне исправить ошибку NoReverseMatch Django?

#django #url #view #cs50

#django #url #Вид #cs50

Вопрос:

Я пытаюсь завершить проект CS50, я хочу отобразить HTML-страницу, шаблон находится в соответствующем каталоге templates / encyclopedia.

На странице ошибок url 127.0.0.1:8000/wiki/HTML указано NoReverseMatch в wiki / HTML. Обратный для ‘edit’ не найден. ‘edit’ не является допустимым именем функции просмотра или шаблона.

Ответственный URLS.py являются "wiki/<str:search>" и "wiki/random" .

Извините, но я не хочу публиковать здесь этот длинный код, но я застрял в этой проблеме уже несколько недель. Я перепробовал много способов, но не знаю, что не так с этим кодом.

Ниже приведен мой URLS.py , URL-адрес индекса проектов включает следующие URL-адреса:

 from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("wiki/newpage", views.newpage, name="newpage"),
    # path("wiki/<str:edit>/edit", views.edit, name="edit"),
    path("wiki/random", views.random, name="random"),
    path("wiki/<str:search>", views.search, name="search"),
    path("wiki/", views.find, name="find")
]
  

Ниже приведен мой VIEWS.py:

 from django.shortcuts import render, redirect
from django.contrib import messages
import markdown2 as md
from . import util
from django import forms
import re, random as rand

def index(request):
    return render(request, "encyclopedia/index.html", {
        "entries": util.list_entries()
    })

def search(request, search):
    if search in util.list_entries():
        html = md.markdown(util.get_entry(search))
        return render(request, "encyclopedia/search.html", {
            "search": search, "html": html
        })
    else:
        return render(request, "encyclopedia/error.html")

def random(request):
    randomPage = rand.choice(util.list_entries())
    if randomPage in util.list_entries():
        html = md.markdown(util.get_entry(randomPage))
        return render(request, "encyclopedia/search.html", {
            "random": randomPage, "html": html
        })
    else:
        return render(request, "encyclopedia/error.html")

def find(request):
    if request.method == "GET":
        query = request.GET.get('q')
        for queryMatch in util.list_entries():
            if query.casefold() == queryMatch.casefold():
                html = md.markdown(util.get_entry(query))
                return render(request, "encyclopedia/search.html", {
                    "queryMatch": queryMatch, "html": html
                })
        regex = re.compile(query.casefold())
        matchList = []
        for a in util.list_entries():
            if regex.match(a.casefold()):
                matchList.append(a)
        if not matchList:
            matchList = util.list_entries()
        return render(request, "encyclopedia/list.html", {
            "match": matchList
        })

class NewPageForm(forms.Form):
    title = forms.CharField(label="Title")
    content = forms.CharField(label="Markdown Content", widget=forms.Textarea(attrs={'cols': '100'}))

def newpage(request):
    if request.method == "POST":
        form = NewPageForm(request.POST)
        if form.is_valid():
            title = form.cleaned_data["title"]
            content = form.cleaned_data["content"]
            if title in util.list_entries():
                messages.error(request, f"'{title}' page title already exists!!nPlease type another title.")
                return render(request, "encyclopedia/newpage.html", {
                    "form": form
                })
            else:
                util.save_entry(title, content)
                return redirect(f"/wiki/{title}")
        else:
            return render(request, "encyclopedia/newpage.html", {
                "form": form
            })
    return render(request, "encyclopedia/newpage.html", {
        "form": NewPageForm()
    })

# def edit(request, edit):
#     entry = util.get_entry(edit)
  

Комментарии:

1. Какая версия Django? Url-адрес с именем ‘find’ работает?

2. @NKSM нет, он не работает и показывает ту же ошибку.

3. Какова структура каталогов вашего проекта? Вы включили свои app.urls в project.urls?

Ответ №1:

Вы включили свой app.urls in project.urls ?

Включая другие URLconfs

Несколько примеров из руководства по Django:

polls/urls.py

 from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]
  

mysite/urls.py

 from django.contrib import admin
from django.urls import include, path

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

Комментарии:

1. Это риторический вопрос? 🙂

2. @Scratte, время покажет 🙂

3. @NKSM да, я включил свое приложение URLs.py в моем проекте.