Django templatetags:过滤器

时间:2017-02-15 09:18:51

标签: python django templatetags

比方说,我想为动态计数器创建一个简单的模板标签,如何为{{ request.user }} author的{​​{1}}内部值注入一个示例?

我的主意是{{ 'blog.model.Post'|counter:"{'author':'...?'}" }},但当然它应该返回{{ '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?   因为我使用这种方法来提供仅专注于模板标签的插件。

1 个答案:

答案 0 :(得分:0)

也许,这种情况的最佳方法不是模板标签,是@property:

class foo(models.Model):
    foo_date = models.DateTimeField(null=True)

    @property
    def get_foo_count(self):
        ...some code ...
        return 1

您可以从模板中调用propertys。

如果您仍想使用templatetags:

在templatetag上:

@register.simple_tag
def get_foo_count(foo):
        return 1
模板上的

{% load foo_templatetags %}
{% get_foo_count foo as foo_count %}

{{ foo_count }}