Страницы

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

среда, 25 декабря 2019 г.

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

#python #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()


Ответы

Ответ 1



Все правильно, метод 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"]) []

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

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