Slug returns Reverse for '' with arguments '('',)' not found. 1 шаблон(ы)

Я пытаюсь сделать так, чтобы при просмотре блога по определенной ссылке на моем сайте, url отображался www.example.com/view-blog/slug. У меня это работает для изображений и заголовка изображения. Но я не могу заставить его работать с заголовками блогов.

Он продолжает возвращать ошибку:

Повтор для 'viewblog' с аргументами '('',)' не найден. Попытка 1 шаблона(ов): ['view\-blog/(?P[-a-zA-Z0-9_]+)/\Z'].

Models.py

class BlogPost(models.Model):
    blog_title = models.CharField(max_length=100, null=False, blank=False, default="")
    slug = models.SlugField()
    blog_article = RichTextUploadingField(null=True, blank=True, default="ici")
    blog_image = models.ImageField(null=True, blank=True, upload_to="images", default="default.png")
    blog_date = models.DateField(auto_now_add=True)
    blog_published = models.BooleanField(default=False)
    blog_featured = models.BooleanField(default=False)
        
    def save(self, *args, **kwargs):
        self.slug = self.slug or slugify(self.blog_title)
        super().save(*args, **kwargs)

    def __str__(self):
        return self.blog_title

Views.py

def viewBlog(request, slug):
    try:
        blog = BlogPost.objects.get(slug=slug)
    except BlogPost.DoesNotExist:
        print("ViewBlog with this slug does not exist")
        blog = None
    return render(request, 'view-blog.html', {'blog': blog, 'slug': slug})

Urls.py

urlpatterns = [
    path('', views.galleryPage, name='gallery'),
    path('gallery/', views.galleryPage, name='gallery'),
    path('contact/', views.contactPage, name='contact'),
    path('blog/', views.blogPage, name='blog'),
    path('blogs/', views.blogsPage, name='blogs'),
    path('search-blogs/', views.searchBlogs, name='searchblogs'),
    path('view-image/<slug:slug>/', views.viewImage, name='viewimage'),
    path('view-blog/<slug:slug>/', views.viewBlog, name='viewblog'),
    path('thank-you/', views.thankyouPage, name='thankyou'),
    path('about-me/', views.aboutmePage, name='aboutme'),
]

**В одном из моих шаблонов я хочу сделать ссылку на страницу viewblog из ** ( Я пытался заменить .id в моих урлах на .slug, но это то, что дает мне ошибку.

<body>
<header>{% include 'navbardesktop.html' %}</header>
  <div class="blog-container">
    <h1 class="all-blog-title" id="all-blog-title" style="text-align: center;">All Blogs</h1>
    <br>
      <div class="search">
        <form class="d-flex" method="POST" action="{% url 'searchblogs' %}">
          {% csrf_token %}
          <i class="fa fa-search"></i>
          <input type="text" class="form-control" placeholder="Search keyword" name="searched">
          <button id="search-btn" class="btn btn-secondary">Search</button>
        </form>
      </div>
      <br> 
    <hr id="blog-hr" style="width:50%; margin-left:25% !important; margin-right:25% !important;" />
    <div class="blog-post-container">
      <div class="dropdown">
        <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
          Blog List
        </button>
        <ul class="dropdown-menu" style="background-color: #d6d6d6 ;">
          {% for post in posts %} {% if post.blog_published is True %}
          <li><a class="dropdown-item" href="{% url 'viewblog' post.id %}">{{post.blog_title}}</a></li>
          {% endif %}
          {% endfor %}
        </ul>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
      </div>
      <div class="row">
        {% for post in posts %} {% if post.blog_published is True %}
          <div class="col-md-4" id="blog-col">
              <div class="blog-post">
                <div class="blog-content">
                      <img class="blog-img"src="{{post.blog_image.url}}"alt="My image"/>
                      <h2 class="blog-title">{{post.blog_title}}</h2>
                      <hr id="blog-hr" style="width: 90%" />
                      <article class="blog-article">
                        <p>{{post.blog_article|truncatechars_html:265|safe}}</p>
                      </article>
                      <a href="{% url 'viewblog' post.slug %}"class="btn btn-secondary"type="button"class="blog-button">Read More...</a>
                      <p class="blog-date">Posted on: {{post.blog_date}}</p>
                    </div>
                </div>
              </div>
              {% endif %} {% empty %}
              <h3>No Blog Uploads</h3>
              {% endfor %}
          </div>
      </div>
    </div>
  </div>  
 

Для отладки просто выведите значение post.slug в html-страницу и вы увидите, что не так. "xxx" и "yyy" нужны только для того, чтобы четко отметить на выводе, где должно появиться то или иное содержимое.

{% for post in posts %} 

xxx {{ post.slug }} xxx <br>
yyy {{ post.blog_title }} xxx <br>

{% endfor %}
Вернуться на верх