iCo*_*yer 5 django django-templates django-models django-taggit
目前,我仍在学习 Django 并使用 Django 2.2 创建我的博客。但不知何故,当我使用 django-taggit 时出现错误。
如何通过标签过滤帖子?
我已阅读文档,但没有完全介绍如何将其实现到实际项目中。
这是我的代码:
我尝试了几种不同的方法,仍在 StackOverflow 中搜索,但仍然没有答案。
的结果与 的结果/blog/tag/post-tagged相同/blog。那么我该如何过滤它views.py呢?或者也许来自blog.html?
所以结果/blog/tag/post-tagged仅来自标记的帖子。
这是我的代码:
models.py:
...
from taggit.managers import TaggableManager
"Post Model"
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
slug = models.SlugField(max_length=100, null=True, blank=True, unique=True)
title = models.CharField(max_length=200)
tags = TaggableManager(blank=True)
...
Run Code Online (Sandbox Code Playgroud)
views.py:
def blogIndex(request):
posts = Post.objects.all().order_by("-created_date")[0:4]
context = {"posts": posts,}
return render(request, 'blog.html', context)
def Tagging(request, slug):
tags = Tag.objects.filter(slug=slug)
posts = Post.objects.all().order_by("-tags")
context = {
'tags': tags,
'posts': posts,
}
return render(request, 'blog.html', context)
Run Code Online (Sandbox Code Playgroud)
urls.py:
path("tag/<slug:slug>/", views.Tagging, name='tagged'),
Run Code Online (Sandbox Code Playgroud)
我的blog.html:
<div id="tags-middle">
<div class="tags-cloud">
Tags :
{% for tag in post.tags.all %}
<a href="{% url 'tagged' tag.slug %}">{{ tag.name }}</a>
{% endfor %}
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我通过过滤来自 的标签解决了这个问题views.py。
因为我的帖子中有多个标签。所以__in和tags必须在列表中。
这是我的views.py:
tags = Tag.objects.filter(slug=slug).values_list('name', flat=True)
posts = Post.objects.filter(tags__name__in=tags)
Run Code Online (Sandbox Code Playgroud)
基本上,正如文档所说,我们可以使用字符串进行过滤,如下所示:
posts = Post.objects.filter(tags__name__in=["Lorem"])
Run Code Online (Sandbox Code Playgroud)
但它只需要一根绳子。
如果我尝试使用多个字符串,那么["Lorem", "Ipsum"]它只会在/blog/tag/lorem.
| 归档时间: |
|
| 查看次数: |
4513 次 |
| 最近记录: |