При запуске моего локального сервера Django dev (2.2) в виртуальной среде я обнаружил след.Основные ключевые слова, которые являются частью этой ошибки, включают в себя «django.urls.exceptions.NoReverseMatch» и «недопустимая функция представления или имя шаблона».
Я делаю код, вроде своего курса Удеми, созданного НикомВальтер.Часть материала курса включает в себя написание рудиментарного блога с использованием Django.Я близок к концу модуля блога Ника.
Я полагаю, что где-то неверно ссылался на функцию или, возможно, неправильно настроил свой urlpattern.Есть несколько других членов SO, которые сталкивались с подобными ошибками при разрешении, обычно связанном с исправлением опечатки.Я попытался удалить множественное число моей функции post_details
views.Я пробовал варианты в моем urls.py с различными комбинациями регулярных выражений (и без).Я чувствую, что я упускаю из виду что-то тривиальное.
Дошло до того, что я сравниваю свой код с исходным кодом конца курса преподавателя курса, и я не могу на всю жизнь понять,что я делаю не так.
Вот мой код:
urls.py :
from django.urls import path, re_path
# from . import views
from posts.views import *
from redactors.views import *
from counters.views import *
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name='home'),
path('result/', result, name='result'),
path('seth/', counters, name='seth'),
path('james/', posts, name='james'),
re_path(r'^posts/(?P<post_id>[0-9]+)/$', post_details, name='james'),
path('simon/', redactors, name='simon'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
posts / views.py:
from django.shortcuts import redirect, render, get_object_or_404
from .models import Post
def posts(request):
posts = Post.objects.order_by('-pub_date')
return render(request, 'posts/james.html', {'posts':posts})
def post_details(request, post_id):
post = get_object_or_404(Post,pk=post_id)
return render(request, 'posts/detailed.html', {'post':post})
posts / templates / posts / details.html :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Neptune Blog</title>
</head>
<body>
<h1>{{ post.title }}</h1>
<a href="{% url 'post_details' post.id %}"><h1>{{ post.title }}</h1></a>
<h4><span class="glyphicon glyphicon-time" aria-hidden="true"></span> {{ post.pub_date_pretty }}</h4>
<br />
<img src="{{ post.image.url }}" class="img-responsive center-block" style="max-height:300px;" />
<br />
<p>{{ post.body }}</p>
<br />
<br />
</body>
</html>
Я ожидаю, что мой блог будет загружен и правильно отображен.
Вот скриншот отладчика Django, показывающий трассировку в моем веб-браузере.
Вот трассировка от оболочки в полном объеме:
Файл "/home//dev/projects/python/2018-and-2019/CC_Redact_Iter2/venv/lib/python3.7/site-packages/django/urls/resolvers.py", строка 660, в _reverse_with_prefix
повышение NoReverseMatch (msg)
django.urls.exceptions.NoReverseMatch: обратное для 'post_details' не найдено.'post_details' не является допустимой функцией представления или именем шаблона.