Создание ссылки на конкретную статью блога по первичному ключу в Django и slugify url

Я следую некоторым базовым учебникам, чтобы изучить основы создания веб-сайтов на Django. У меня есть работающий "новостной шаблон", но мне трудно (понять) создание ссылок на конкретную статью базы данных и использование slug в url. Мне удалось найти только примеры, где список всех постов показывается со ссылками, но это не то, что я ищу.

У меня это:

models.py

class Post(models.Model):
    title = models.CharField(max_length=200)
    slug=models.SlugField(max_length=250, null=True, blank=True)
    category=models.CharField(max_length=40)
    text=RichTextField(blank=True, null=True)
    created_date = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        self.slug=slugify(self.title)
        super().save(*args, **kwargs)

    # def get_absolute_url(self):
    #     return reverse('post_detail', kwargs={'slug': self.slug})

    def get_absolute_url(self):
        return reverse('post_detail', kwargs={"id":self.id, "slug":self.slug})

views.py

def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    return render(request, 'blog/post_detail.html', {'post': post})

urls.py

urlpatterns = [
    path('',views.index,name='index'),
    path('articles/<int:pk>/', views.post_detail, name='post_detail'),
    # path('articles/<slug>/', views.post_detail, name='post_detail')
    
    ]

html:

 <a href="{% url 'post_detail' pk=1 %}">'*article headline from post.title (somehow)*'</a>

Это работает, когда я жестко кодирую первичный ключ статьи, но, конечно, url отображается с pk и не работает, если я пытаюсь использовать slug (NoReverseMatch).

Что я могу сделать в строке html, чтобы иметь возможность указывать на конкретную статью, но чтобы slugfield был показан в url? (Я не против вводить пк вручную, если все остальное работает)

models.py

def get_absolute_url(self):
    return reverse('post_detail', kwargs={'slug': self.slug})

views.py

def post_detail(request, slug):
    post = get_object_or_404(Post, slug=slug)
    return render(request, 'blog/post_detail.html', {'post': post})

urls.py

#...

urlpatterns = [
    path('articles/<slug>/', views.post_detail, name='post_detail'),
]

HTML

<a href="{{ post.get_absolute_url }}"> ... </a>
Вернуться на верх