2012-05-28 32 views
3

我無法找到答案。因此,在這裏我的問題。對於我想使用django-taggit的新項目。django-taggit從queryset創建tagcloud

有人建議如何基於當前查詢集創建標籤雲嗎?

希望的行爲是用一個未過濾的列表'開始' - 然後通過應用過濾器和標籤來縮小城鎮的結果。在開始時,標籤雲顯示例如50個最常見的標籤。在選擇標籤(或其他標準)後,標籤雲應該只顯示剩餘的可能性。

我知道django-tagging爲此情況提供Tag.objects.usage_for_queryset()。但是我寧願在'-tagging'上面使用'-taggit'。

回答

0

我會建議使用django標記。它有據可查。我用它創建了標籤雲。您可以通過易於加載的模板標籤通過模型,模型實例等訪問標籤雲。這是一個小黑客,但使用.counts方法,你可以破解一些CSS來增加每個字體的大小,就像你在真正的標籤雲中看到的那樣。 Django標記實際上在這方面很出色,因爲它有一個默認的模板標籤,它帶有用於描述的所有內容的格式選項。

+0

是的,也許我會去與Django的標記。這只是我在很多其他項目中使用* -taggit。而且唯一缺少的東西(usage_for_queryset)似乎在* -tagging中很麻煩:http:// goo。gl/gjmNV – ohrstrom

+1

我假設您正在查找queryset用法,那麼您希望從各種對象中檢索標籤並將它們組裝到一個位置。如果是這種情況,我會編輯我的問題以反映並可能包括您正在使用的視圖和模型。這裏是queryset API文檔https://docs.djangoproject.com/en/dev/ref/models/querysets/。模板標籤可能會有所幫助。請注意具有ListView.as_view(model = Author)與定義queryset Author.objects.all()相同。當你在模型實例中獲得對Model.entry_set – eusid

2

This answer顯示瞭如何構建標籤雲。您可以根據參數在視圖中創建一個查詢集,生成一個字典並將其呈現在您的模板中,如該答案中所示。

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:

我得到一個QuerySet在我看來是這樣的:

my_queryset = Tag.objects.filter(foo__bar=baz).distinct() 
+0

的訪問權限的時候,如果我可以不止一次地upvote,我會這麼做! – Private

+0

你可以添加一個這個樣子的屏幕截圖嗎? – Sardathrion