Обратное для 'post_detail' с аргументами ... не найдено
У меня возникает ошибка NoReverseMatch. уже несколько часов все выглядит нормально, но я так и не смог разобраться. Буду благодарен за любую помощь. спасибо
views.py
from django.http import Http404
from django.shortcuts import get_object_or_404, render
from blog.models import Post
# Create your views here.
def postList(request):
posts = Post.objects.all()
return render(request, 'blog/post/list.html',{'posts':posts})
def post_detail(request,year,month,day, post):
post = get_object_or_404(Post, status = Post.Status.DRAFT, slug = post, publish__year=year, publish__month=month, publish__day=day)
return render(request, 'blog/post/detail.html', {'post':post} )
urls.py
from django.urls import path
from . import views
app_name = "blog"
urlpatterns = [
path('', views.postList, name="post_list"),
path('<int:year>/<int:month>/<int:day>/<slug:post>/', views.post_detail, name="post_detail"),
]
models.py
from django.urls import reverse
from django.utils import timezone
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Post(models.Model):
class Status(models.TextChoices):
DRAFT = 'DR', 'Draft'
PUBLISHED = 'PB','Published'
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="blog_posts")
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique_for_date='publish')
body = models.TextField()
created = models.DateTimeField(auto_now_add=True)
publish = models.DateTimeField(default=timezone.now)
status = models.CharField(max_length= 2, choices=Status.choices, default=Status.DRAFT)
updated = models.DateTimeField(auto_now=True)
class Meta:
ordering = ['-publish']
indexes = [
models.Index(fields=['-publish']),
]
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("blog:post_detail", args=[self.publish.year, self.publish.month, self.publish.day, self.slug])
list.html
{% extends "blog/base.html" %}
{% block content %}
{% for post in posts %}
<a href="{{ post.get_absolute_url }}">{{post.title}}</a>
<p>{{post.body|truncatewords:30|linebreaks}}
<p>{{post.created}}</p>
{% endfor %}
{% endblock %}
я хотел видеть список постов с заголовком каждого поста в виде ссылки. при нажатии на ссылку я хотел видеть подробности этого поста. похоже, что метод get_absolute_url в модели Post вызывает проблему. я не знаю, какие еще способы решения проблемы. я буду благодарен за любую помощь. спасибо