Страница не найдена (404)Текущий путь, {% url 'post_detail' post.pk % }, не совпал ни с одним из этих путей
[привет я новичок в django и я столкнулся с проблемой при использовании первичных ключей.название проекта blog project и app is blog это мой код]. вот скриншот ошибки, когда я нажимаю на заголовок:1 пожалуйста, помогите мне
#blog/urls.py
from django.urls import path
from .views import BlogListView,BlogDetailView
urlpatterns = [
path("post/<int:pk>/",BlogDetailView.as_view(),name = "post_detail"),
path('', BlogListView.as_view(), name = "home"),
]
#blog/templates/home.html
{% extends 'base.html' %}
<style>
.post-entry{
color:antiquewhite;
}
</style>
{% block content %}
{% for post in object_list %}
<div class = "post-entry">
<h2><a href = "{% url 'post_detail/' post.pk % }">{{post.title}}</a></h2>
<p>{{post.body}}</p>
</div>
{% endfor %}
{% endblock content %}
#views.py
from django.shortcuts import render
from django.views.generic import ListView,DetailView
from .models import Post
# Create your views here.
class BlogListView(ListView):
model = Post
template_name = "home.html"
class BlogDetailView(DetailView):
model = Post
template_name = "post_detail.html"
Решение, которое нужно попробовать
Я согласен с комментарием gyspark, но я также думаю, что post.pk
нужно изменить на post.id
. Например:
blog/templates/home.html
{% extends 'base.html' %}
<style>
.post-entry{
color:antiquewhite;
}
</style>
{% block content %}
{% for post in object_list %}
<div class = "post-entry">
<h2><a href="{% url "post_detail" post.id %}">{{ post.title }}</a></h2>
<p>{{post.body}}</p>
</div>
{% endfor %}
{% endblock content %}
blog/urls.py
from django.urls import path
from .views import BlogListView, BlogDetailView
urlpatterns = [
path('', BlogListView.as_view(), name="home"),
path("post/<int:pk>/", BlogDetailView.as_view(), name="post_detail"),
]
Но также, импортируете ли вы blog.urls в файл urls.py основного приложения? Или основное приложение называется "blog"?
Другие советы
Еще одна вещь, которая может быть полезной, это добавить блок стилей в base.html:
<!-- The rest of your code -->
<style>
{% block style %}
{% endblock %}
</style>
</head>
<!-- the rest of your code -->
и затем в ваших шаблонах, например home.html, вы обновите его следующим образом:
{% extends 'base.html' %}
{% block style %}
.post-entry{
color:antiquewhite;
}
{% endblock %}
{% block content %}
{% for post in object_list %}
<div class = "post-entry">
<h2><a href="{% url "post_detail" post.id % }">{{ post.title }}</a></h2>
<p>{{post.body}}</p>
</div>
{% endfor %}
{% endblock content %}
У вас есть орфографическая ошибка:
"{% url 'post_detail/' post.pk % }"
Удалите /
и лишний пробел в закрывающем %}
:
"{% url 'post_detail' post.pk %}"