Как посчитать, сколько раз использовался тег, и отобразить его в html? - PullRequest
1 голос
/ 07 июня 2019

Я хочу посчитать, сколько раз тег использовался и отображать его.Я пробовал это решение, но оно отображает количество тегов в сообщении.Я понимаю, что я так считаю, потому что в сообщении рассматривается количество использованных тегов.Но я не понимаю, как сказать ему, что он должен смотреть на все сообщения.Когда я пытаюсь posts.tag.count, то он ничего не показывает.

.html файл:

 <h1 class="card-title">{{ post.title }}</title></h1>
                <p class="card-text text-muted h6">{{ post.author }} | {{ post.created_on | date:"d M Y"}} | Tag:
                    {% for tag in post.tags.all %}
                        <a class="mycardtext" href="{% url 'tag' tag.slug %}"> {{ tag.name }} {{ post.tags.count }} </a>
                    {% empty %}
                      None
                    {% endfor %}
                    </p>

Я также пробовал просто {{tag.count}}, но он также ничего не показывает.

С {{ tag | length}} я тоже попробовал, но, конечно, тогда он показывает длину тега, а не количество раз.

Когда я пытаюсь {{post.tags | length}}, тогда отображается 0

Models.py

class Post(models.Model):
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(max_length=200, unique=True)
    author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
    updated_on = models.DateTimeField(auto_now= True)
    content = RichTextField(config_name='awesome_ckeditor')
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=1)
    tags = TaggableManager()

Views.py

def tag(request, slug):
    posts = Post.objects.filter(tags__slug=slug)
    return render(request, 'index.html', {"post_list": posts, "slug": tag})

1 Ответ

0 голосов
/ 07 июня 2019

Если вы хотите показать, сколько раз тег использовался в любом сообщении, вам нужно будет создать пользовательский фильтр, который в основном является функцией, которую вы можете вызывать в шаблоне.

Создайте папку с именем templatetags в том же каталоге текущего приложения

my_app
======

    models.py
    views.py
    templatetags
        __init__.py
        app_tags.py


app_tags.py
===========

from my_app.models import *
from django import template
register = template.Library()

@register.filter(name='count_tags_usage')
def count_tags_usage(tag):
    posts = Post.objects.filter(tags__name__in = [tag])
    return posts.count()


html
====

<html>
    {% load app_tags %}
    <head> .... </head>
    <body>
        ....
        <a class="mycardtext" href="{% url 'tag' tag.slug %}">
           {{ tag.name }} {{ tag|count_tags_usage }}
        </a>
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...