Django:自定义模板标记,需要2个变量

时间:2015-01-17 21:49:51

标签: python django django-templates

我想要一个自定义模板标记,它将两个变量作为参数。这就是我在模板中的内容:

{% load accountSum %}
{% accountSum 'account_id' 'account_type' %}

我已经读过你需要加载这些变量的上下文,但我还没有找到一种有效的方法。所以我的问题是,如何在templatetags / accountSum.py中定义自定义模板标签?

这是我到目前为止所做的:

from django import template

register = template.Library()

def accountSum(context, account_id, account_type):
    account_id = context[account_id]
    account_type = context[account_type]
    # do something with the data
    # return the modified data

register.simple_tag(takes_context=True)(accountSum)

1 个答案:

答案 0 :(得分:2)

您误解了模板标记的使用情况,I have read that you need to load the context of these variables只有在需要访问/修改现有上下文时才需要上下文,而不是只需要返回从提供的参数中计算出的值。

所以,在你的情况下,你只需要这样:

@register.simple_tag
def accountSum(account_id, account_type):
   # your calculation here...
   return # your return value here

Django 文档有更详细的解释和示例,您可以关注 - Simple tags

或者,如果您打算采用上下文 account_id account_type 并在每次通话时返回修改后的值,您可以简单地省略参数,并简单地执行此操作:

@register.simple_tag(take_context=True)
def accountSum(context):
    account_id = context['account_id']
    account_type = context['account_type']
    # do your calculation here...
    return # your modified value

然后,您只需在模板中调用{% accountSum %}即可。

或者,如果您想动态地将上下文内容作为参数:

@register.simple_tag(take_context=True)
def accountSum(context, arg1, arg2):
    arg1 = context[arg1]
    arg2 = context[arg2]
    # calculation here...
    return # modified value...

使用字符串在模板中传递参数,如:

{% accountSum 'account_id' 'account_type' %}

我希望这可以帮助您了解如何在您的案例中使用模板标记。

更新

我的意思是这个(因为你不需要访问上下文,你真正需要的是像往常一样接受参数):

@register.simple_tag
def accountSum(arg1, arg2):
   # your calculation here...
   return # your return value here

并在模板中使用它:

{% accountSum account.account_id account.account_type %}