3

我找不到答案。所以这是我的问题。对于一个新项目,我想使用django-taggit

有人对如何根据当前查询集创建标签云有建议吗?

期望的行为是从未过滤的列表“开始” - 然后允许通过应用过滤器和标签来缩小结果范围。在开始标签云显示例如 50 个最常见的标签。选择标签(或其他标准)后,标签云应该只显示剩余的可能性。

我知道django-tagging针对这种情况提供了Tag.objects.usage_for_queryset() 。但我更喜欢使用“-taggit”而不是“-tagging”。

4

4 回答 4

4

django-taggit-templatetags似乎是 django-taggit 的 tagcloud 的“首选”位置。

不过,它似乎无法处理查询集。:(

所以,我添加了:

@register.inclusion_tag('taggit_templatetags/tagcloud_include_qs.html')
def include_tagcloud_qs(queryset):
    try:
        queryset = queryset.annotate(num_times=Count('taggeditem_items'))
    except FieldError:
        queryset = queryset.annotate(num_times=Count('taggit_taggeditem_items'))

    num_times = queryset.values_list('num_times', flat=True)

    weight_fun = get_weight_fun(T_MIN, T_MAX, min(num_times), max(num_times))
    queryset = queryset.order_by('name')
    for tag in queryset:
        tag.weight = weight_fun(tag.num_times)

    return {"tags": queryset}

templatetags/taggit_extras.py

这到 taggit_templatetags/tagcloud_include_qs.html 的新文件

<div>
{% for tag in tags %}
<font size={{tag.weight|floatformat:0}}>{{tag}}</font> 
{% endfor %}
</div>

我在我的模板中这样使用它:

{% include_tagcloud_qs my_queryset %}

我没有花太多时间查看 django-taggit-templatetags 代码,所以请随时用更好的解决方案更新它!

PS:

我在我的视图中得到一个查询集,如下所示:

my_queryset = Tag.objects.filter(foo__bar=baz).distinct()
于 2012-12-31T17:41:28.100 回答
2

这个答案显示了如何构建标签云。您将根据您的参数在视图中创建一个查询集,生成一个字典,并将其呈现在您的模板中,如该答案所示。

于 2012-08-08T22:51:26.210 回答
0

我建议使用 django-tagging。这是有据可查的。我用它创建了标签云。您可以通过易于加载的模板标签通过模型、模型实例等访问标签云。这有点骇人听闻,但是使用 .counts 方法,您可以修改一些 css 来增加每种字体的大小,就像您在真实的标签云中看到的那样。Django 标记实际上在这方面表现出色,因为它有一个默认模板标记,其中包含您所描述的所有内容的格式选项。

于 2012-05-28T12:27:32.543 回答
0

我在https://github.com/twig/django-taggit/commit/42cd4e04f00496103f295c0afd8297074be50dcf添加了一个 TagBase.get_for() 函数

这基本上获取用于给定查询集的标签,然后您可以从那里做您需要做的事情。

于 2012-09-28T01:58:33.017 回答