#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
?
Несколько примеров из руководства по 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 в моем проекте.