Как отобразить теги, использованные более одного раза, только один раз?
В выпадающем списке повторяются и отображаются одни и те же теги. Он перебирает теги, используемые в каждом сообщении, но не проверяет, повторяются ли теги или нет. Есть ли способ избежать этого повторения? Мой выпадающий список выглядит следующим образом:
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Tags
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
{% for post in posts %}
{% for tag in post.tags.all %}
<a class="dropdown-item" href="{% url 'post_tag' tag.slug %}">
{{ tag.name }}
</a>
{% endfor %}
{% endfor %}
</div>
</div>
views.py
def home(request, tag_slug=None):
posts = Post.objects.all()
#tag post
tag = None
if tag_slug:
tag = get_object_or_404(Tag, slug=tag_slug)
posts = posts.filter(tags__in=[tag])
return render(request, 'blog/home.html', {'posts':posts})
модели имеет
title = models.CharField(max_length=100)
content = RichTextUploadingField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
image = models.ImageField(default= 'blog_default.jpg', upload_to='blog-pics')
tags = TaggableManager()
Мне нужно решить следующую проблему. Я хочу использовать одни и те же теги в разных постах, но отображать теги только один раз в выпадающем списке
Вы, похоже, хотите отобразить все теги всех постов, тогда логичнее просто передать кверисет всех тегов, так:
def home(request, tag_slug=None):
posts = Post.objects.all()
tags = Tag.objects.all()
if tag_slug:
tag = get_object_or_404(Tag, slug=tag_slug)
posts = posts.filter(tags=tag)
return render(request, 'blog/home.html', {'posts': posts, 'tags': tags})
и работать с:
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> {% for tag in tags %} <a class="dropdown-item" href="{% url 'post_tag' tag.slug %}"> {{ tag.name }} </a> {% endfor %} </div>