Django Taggable 标签不起作用,页面为空

问题描述 投票:0回答:1

如果我写的不清楚,我提前道歉,我对 django 和 stackoverflow 都是新手。我正在尝试实现一个博客网站,其中包含帖子等等。该网站的一个重要部分是标签搜索,我正在尝试通过 Taggit 实现它。但是,当我单击标签网址链接时,我总是得到一个空白页面。我还有一个分页系统,可以将博客分为不同的页面。

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>

当我尝试重写它并更改网址和视图时,结果是相同的 - 一个空白页面。

python django django-models django-taggit
1个回答
0
投票

问题的一部分是您使用正则表达式定义模式,但是

path(..)
有特殊语法,而不是正则表达式:

我们可以将路径定义为:

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}
    )
© www.soinside.com 2019 - 2024. All rights reserved.