Страница со слизью не открывается
Мой slug входит в url, но страница, связанная с ним, не открывается, может кто-нибудь помочь мне с этим. Я приложил код, пожалуйста, посмотрите его и скажите мне, в чем проблема. btw это страница блога.
Models.py
class Post(models.Model):
    title = models.CharField(max_length=200, unique=True)
    slug = models.CharField(max_length=100)
    author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
    updated_on = models.DateTimeField(auto_now= True)
    content = models.TextField()
    created_on = models.DateTimeField(default=timezone.now())
    status = models.IntegerField(choices=STATUS, default=0)
    class Meta:
        ordering = ['-created_on']
    def __str__(self):
        return self.title
        
    def get_absolute_url(self):
        return reverse("post_details", kwargs={"slug": self.slug})
index.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.0">
    <title>Document</title>
    <style>
        body {
            font-family: "Roboto", sans-serif;
            font-size: 18px;
            
        }
    
        .head_text {
            color: white;
        }
    
        
    </style>
</head>
<body>
    {% extends "base.html" %}
    {% block content %}
<header class="masthead">
    <div class="overlay"></div>
    <div class="container">
        <div class="row">
            <div class=" col-md-8 col-md-10 mx-auto">
                <div class="site-heading">
                    <h3 class=" site-heading my-4 mt-3 text-white"> Welcome to my awesome Blog </h3>
                    </p>
                </div>
            </div>
        </div>
    </div>
</header>
<div class="container">
    <div class="row">
        <!-- Blog Entries Column -->
        <div class="col-md-8 mt-3 left">
            {% for post in post_list %}
            <div class="card mb-4">
                <div class="card-body">
                    <h2 class="card-title">{{ post.title }}</h2>
                    <p class="card-text text-muted h6">{{ post.author }} | {{ post.created_on}} </p>
                    <p class="card-text">{{post.content|slice:":200" }}</p>
                    <a href="/blog/{{post.slug}}" class="btn btn-primary">Read More →</a>
                </div>
            </div>
            {% endfor %}
        </div>
    </div>
</div>
{% endblock content %}
</body>
</html>
post_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.0">
  <title>Document</title>
</head>
<body>
  {% include 'base.html' %} 
{% block content %}
<div class="container">
  <div class="row">
    <div class="col-md-8 card mb-4  mt-3 left  top">
      <div class="card-body">
        <h1>{% block title %} {{ object.title }} {% endblock title %}</h1>
        <p class=" text-muted">{{ post.author }} | {{ post.created_on }}</p>
        <p class="card-text ">{{ object.content | safe }}</p>
      </div>
    </div>
  </div>
</div>
{% endblock content %}
</body>
</html>
view.py
def post_Detail(request, slug):
    Post = Post.objects.filter(slug=slug).first()
    context = {'Post': Post}
    return render(request, 'blog/post_details.html')
class PostList(generic.ListView):
    queryset = Post.objects.all().order_by('-created_on')
    template_name = 'index.html'
urls.py
from django.urls import re_path as url
 url('', views.PostList.as_view(), name='home'),
  url('/<str:slug>', views.post_Detail, name='post_Detail'),
здесь в url сервера идет мой slug, но страница шаблона не меняется она остается только на индексной странице
Во-первых, вы должны указать поле slug вашей модели как SlugField (Правильное использование). Если каждый пост уникален, вам придется задать уникальный параметр полю slug.
    class Post(models.Model):
    slug = models.SlugField(unique= True)
  
    class Meta:
        ordering = ['-created_on']
  
    def get_absolute_url(self):
        return reverse("post_details", kwargs={"slug": self.slug})
 Во-вторых, post.slug не является правильным использованием в шаблоне, вы должны использовать динамический url с get_absolute_url.
 <a href="/blog/{{post.get_absolute_url}}"> ...... </a>
вместо
 <a href="/blog/{{post.slug}}"> ...... </a>
 В-третьих, вы можете использовать get_obejct_or_404 или get вместо фильтра.
post = Post.objects.get(slug=slug)
или
from django.shortcuts import get_object_or_404
post= get_object_or_404(Post, slug=slug)
вместо
Post = Post.objects.filter(slug=slug).first()
Вам не нужно использовать разделитель путей в начале части URL. Django делает это автоматически. Но вы также должны использовать окончания. Также django.conf.urls.url() был устаревшим в Django 3.0, и удален в Django 4.0+. Вы можете использовать path:
from django.urls import path
path('<slug:slug>/', views.post_Detail, name='post_Detail')