3

これに対する答えが見つかりませんでした..だからここに私の質問があります。新しいプロジェクトでは、 django-taggitを使用したいと思います。

現在のクエリセットに基づいてタグクラウドを作成する方法について誰か提案がありますか?

望ましい動作は、フィルタリングされていないリストから「開始」することです。次に、フィルタとタグを適用して結果を絞り込むことができます。タグ クラウドの最初に、たとえば最も一般的な 50 個のタグが表示されます。タグ (またはその他の基準) を選択した後、タグクラウドは残りの可能性のみを表示する必要があります。

私は、django-taggingがTag.objects.usage_for_queryset()を提供していることを知っています。しかし、「-tagging」よりも「-taggit」を使用したいと思います。

4

4 に答える 4

4

django-taggit-templatetagsは、django-taggitのタグクラウドの「行き先」の場所のようです。

ただし、クエリセットを処理するようには見えません。:(

だから、私は追加しました:

@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 に答える