Теги Django Taggable не работают, пустая страница

Заранее прошу прощения, если напишу что-то непонятное, я новичок и в django, и в stackoverflow. Я пытаюсь реализовать сайт-блог, с постами и всем прочим. Важной частью сайта является поиск по тегам, который я пытаюсь реализовать через Taggit. Однако, когда я нажимаю на ссылку tag url, я всегда получаю пустую страницу. У меня также есть система пагинации, которая делит блог на разные страницы.

urlpatterns = [
    path('', views.PostList.as_view(), name="home"),
    path(r'^$', views.post_list, name='post_list'),
    path(r'^tag/(?P<tag_slug>[-\w]+)/$', views.post_list, name='post_list_by_tag'),
]
class Post(models.Model):
    title = models.CharField(max_length = 250, unique = True)
    slug = models.CharField(max_length = 200, unique = True)

    type = models.CharField(max_length=100, choices=Type_CHOICES)
    section = models.CharField(max_length=100, choices=Section_CHOICES)
    tags = TaggableManager()
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Post
from django.views import generic
from taggit.models import Tag
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def post_list(request, tag_slug=None):
    object_list = Post.objects.all()
    tag = None

    if tag_slug:
        tag = get_object_or_404(Tag, slug=tag_slug)
        object_list = object_list.filter(tags__in=[tag])

    paginator = Paginator(object_list, 3) # 3 posts in each page
    page = request.GET.get('page')
    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer deliver the first page
        posts = paginator.page(1)
    except EmptyPage:
        # If page is out of range deliver last page of results
        posts = paginator.page(paginator.num_pages)
    return render(request, 'index.html', {'page': page,
                                                   'posts': posts,
                                                   'tag': tag,
                                                    '/media': Post.image})
<p>Tags:
  {% for tag in post.tags.all %}
       <a class="tag" href="{% url 'post_list_by_tag' tag %}">
           {{ tag.name }}
        </a>
       {% if not forloop.last %}, {% endif %}
  {% endfor %}
</p>

Как только я попытался переписать его и изменить урлы и представления, результат был тот же - пустая страница.

Ну, часть проблемы в том, что вы определяете шаблон с помощью regex, но path(..) имеет специальный синтаксис, а не regex:

Мы можем определить путь так:

urlpatterns = [
    path('', views.post_list, name='home'),
    path('tag/<slug:tag_slug>/', views.post_list, name='post_list_by_tag'),
]

с видом:

def post_list(request, tag_slug=None):
    object_list = Post.objects.all()
    tag = None

    if tag_slug:
        tag = get_object_or_404(Tag, slug=tag_slug)
        object_list = object_list.filter(tags=tag)

    paginator = Paginator(object_list, 3)  # 3 posts in each page
    page = request.GET.get('page')
    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer deliver the first page
        posts = paginator.page(1)
    except EmptyPage:
        # If page is out of range deliver last page of results
        posts = paginator.page(paginator.num_pages)
    return render(
        request, 'index.html', {'page': page, 'posts': posts, 'tag': tag}
    )
Вернуться на верх