說吧,我想創建一個簡單的模板標籤爲動態計數器,我怎樣才能注入一個例子{{ request.user }}
內部值author
:{{ 'blog.model.Post'|counter:"{'author':'...?'}" }}
?Django templatetags:過濾器內的對象
在我的壞主意,{{ 'blog.model.Post'|counter:"{'author':'request.user'}" }}
,但當然它應該返回字符串'request.user'
,但不是實際的對象。
import ast
from django import template
from django.utils.module_loading import import_string
register = template.Library()
@register.filter
def counter(model_name, filter=None):
"""
by all objects:
{{ 'yourapp.model.ClassName'|counter }}
by filter objects:
{{ 'yourapp.model.ClassName'|counter:"{'field_name':'value'}" }}
> example:
{{ 'blog.model.Post'|counter:"{'author':'...?'}" }}
"""
model = import_string(model_name)
if filter is not None:
filter_dict = ast.literal_eval(filter)
return model.objects.filter(**filter_dict).count()
return model.objects.count()
作爲一個說明;爲什麼我不把它處理成
models.py
或views.py
? 因爲我使用這種方法來提供我的插件,只專注於模板標籤。
你不會做這在所有;這對於模板來說太多了。只是你必須做'literal_eval'應該是一個紅旗。 –
你能告訴我一個想法嗎? –
這屬於視圖中。 –