たとえば、ダイナミックカウンタ用のtemplatetagsを作成するには、{{ 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
に扱っていないのですか? 私はこのメソッドを使用して、templatetagsのみに焦点を当てたプラグインを提供しています。
あなたはすべてでこれをしないでしょう。それはあまりにも多くのテンプレートのロジックです。 'literal_eval'をやらなければならないという事実は赤い旗でなければなりません。 –
あなたは私にそれをするアイディアを提案できますか? –
これはビューに属します。 –