使用django-taggit-templatetags2,我可以在模板页面中显示与测试vlog相关的所有标签。

我将存储在数据库中的vlog尚未发布(仅在特定日期之后显示),以便可以在数据库中存储大量vlog详细信息,然后在特定日期(例如,星期二)自动释放每个vlog。每周)。

这意味着django-taggit-templatetags2显示{% for tag in vlog_tags %}的所有代码将包括vlog条目的标签,这些标签尚未在vlog中显示给用户,但存储在数据库中。

如何仅显示vlog_date_published不大于now的vlog条目的标签和计数? 可能有用于已发布和尚未发布的vlog条目的相同标签。因此,这应该在标记的显示中加以考虑。

这是我的模型代码:

from taggit.managers import TaggableManager

class VlogDetails(models.Model):
    ....
    vlog_date_published = models.DateField(null=False, blank=False, default=datetime.now, help_text='The date the vlog video will be made public.')
    vlog_tags = TaggableManager(blank=True, help_text='To make a new tag, add a comma after the new tag name.')
    ....

这是显示所有标签模板的代码:
    {% load taggit_templatetags2_tags %}

    {% get_taglist as vlog_tags %}

    {% for tag in vlog_tags %}
        {% if tag.num_times > 0 %}
            <a class='u-tags-v1 g-color-grey g-bg-grey-opacity-0_1 g-bg-grey--hover g-color-white--hover g-rounded-50 g-py-4 g-px-15' href="{% url 'vlog_tag' tag %}" hreflang="en" rel="tooltip" title="{% blocktrans %}Display all vlog entries containing this tag.{% endblocktrans %}"><i class="fa fa-tag icon_padding"></i> {{tag}} x {{tag.num_times}}</a>
        {% endif %}
    {% endfor %}

编辑

这是来自数据库的屏幕快照,是指尽管vlog尚未显示给用户,但仍显示给用户的标签,但已存储在db中,等待根据vlog_date_published> now自动发布。

在这种情况下,不应将Employment NDA的标签显示给用户,因为使用tagt的vlog条目尚未显示给用户,因为vlog_date_published大于今天(在撰写本文时)。

vlogdetails表(id = 24):python - django-taggit-根据发布的日期vlog显示所有标签-LMLPHP

taggit_taggeditem表(id = 191-FK的24和123):python - django-taggit-根据发布的日期vlog显示所有标签-LMLPHP

taggit_tag表(id = 123):
python - django-taggit-根据发布的日期vlog显示所有标签-LMLPHP

另一个编辑

因此,在这种情况下,不应显示以下Employment NDA标签,因为它属于尚未发布/显示给公众的vlog详细信息,而应显示所有其他标签(作为其他所有vlog详细信息标签所属的已发布):

python - django-taggit-根据发布的日期vlog显示所有标签-LMLPHP

最佳答案

这可以通过创建两个自定义模板标签来替换django-taggit-templatetags2中的{{tag}}{{tag.num_times}}值来实现。

如果相关vlog的发布日期为GT {% if tag.id|vlog_tag_display %},且条件now的条件自定义标签将仅显示该标签,并且{{tag.num_times}}将被{{tag|vlog_tag_count}}的自定义标签替换,如下所示。

首先,将以下代码添加到模板页面。这将循环遍历所有标签,但仅在发布了vlog时才显示标签:

{% load customised_template_tags i18n taggit_templatetags2_tags %}
{% get_taglist as tags %}

{% for tag in tags %}
    {% if tag.num_times > 0 %}
        {# only display the tag if the vlog is published #}
        {% if tag.id|vlog_tag_display %}
                <a class='u-tags-v1 g-color-grey g-bg-grey-opacity-0_1 g-bg-grey--hover g-color-white--hover g-rounded-50 g-py-4 g-px-15' href="{% url 'vlog_tag' tag %}" hreflang="en" rel="tooltip" title="{% blocktrans %}Display all vlog entries containing this tag.{% endblocktrans %}"><i class="fa fa-tag icon_padding"></i> {{tag}} x {{tag|vlog_tag_count}}</a>
        {% endif %}
    {% endif %}
{% empty %}
    {# No Tags recorded. #}
    <br /><b>{% trans "No Tags Recorded." %}</b><br />
{% endfor %}

接下来,将以下代码添加到您的自定义模板标签页面。如果这是您的新体验,这是一个link来设置自定义模板标签页面:
from zoodal.core.models import VlogDetails

@register.filter(name='vlog_tag_count')
def vlog_tag_count(value):
    date_now = timezone.now()
    count_vlog_tag = VlogDetails.objects.filter(vlog_date_published__lte=date_now, tags__name=value).count()
    """ Only count the tag if the vlog entry is published. """
    return count_vlog_tag


@register.filter(name='vlog_tag_display')
def vlog_tag_display(value):
    date_now = timezone.now()
    display_vlog_tag = VlogDetails.objects.filter(vlog_date_published__lte=date_now, tags__id=value)
    """ Only display the tag if the vlog entry is published. """
    if display_vlog_tag:
        return True
    else:
        return False

关于python - django-taggit-根据发布的日期vlog显示所有标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48178814/

10-13 09:38