说吧,我想创建一个简单的模板标签为动态计数器,我怎样才能注入一个例子{{ 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'应该是一个红旗。 –
你能告诉我一个想法吗? –
这属于视图中。 –