Страницы

Поиск по вопросам

четверг, 7 марта 2019 г.

Django. Как вывести тэги в шаблоне?

Подключил django-taggit к блогу. Хочу вывести определенный набор тегов под каждой статьей, используя {{ article.tags.names }}. В шаблоне - получаю список тэгов под статьей ['linux', 'python', 'english']. Как можно исправить это?
views.py
def index(request): lastet_articles_list = Article.objects.order_by('-pub_date') list_of_tags = [] for obj in lastet_articles_list: list_of_tags += obj.tags.names() list_of_tags = list(set(list_of_tags)) context = { 'lastet_articles_list': lastet_articles_list, 'list_of_tags': list_of_tags, } return render(request, 'article/index.html', context)
(list_of_tags здесь использую, чтобы просто вывести имеющиеся тэги на сайте)
index.html

{% if lastet_articles_list %} {% for article in lastet_articles_list %}
{{ article.title }}

{% endfor %} {% endif %}

models.py
from taggit.managers import TaggableManager
class Article(models.Model): title = models.CharField(max_length=50) pub_date = models.DateTimeField('date published') text = models.TextField() tags = TaggableManager()


Ответ

Все правильно, метод names возвращает массив имен тэгов. Выводите их по одному в вашем блоге.

Эксперимент, чтобы понять как это работает:
>>> from Tasks.models import Post >>> p = Post.objects.get(pk=1) >>> p.tags >>> p.tags.add('cat', 'dog') >>> p.save() >>> p.tags.names > >>> p.tags.names() ['cat', 'dog'] >>> for name in p.tags.names(): ... print(name) ... cat dog >>> p = Post() >>> p.title = 'Post 2' >>> p.text = 'second post' >>> p.save() >>> p.pk 2 >>> p.tags.add('cat') >>> p.save() >>> Post.objects.filter(tags__name__in=["cat"]) [, ] >>> Post.objects.filter(tags__name__in=["dog"]) []

Комментариев нет:

Отправить комментарий