2011-08-04 61 views

回答

2

你不能,除非標籤知道如何修改上下文(這些通常有xxx as variable語法可用)。如果沒有,你可以編寫一個封裝(作爲自定義標籤)。

+0

現在你可以做到了,因爲django在模板語言a中添加了「as」賦值運算符(版本1.9?)。請參閱下面的答案。 – foobarbecue

0

正確的方法做,這是寫自己的標籤:

{%widthratio_add A B C d%}

如果你寫的代碼做同樣的邏輯widthratio,然後添加編號。

雖然,我懷疑你只是試圖做到這一點,因爲Django不允許超出「添加」的模板的基本數學,並且當你寫自己的標籤時,你可以做更直接的事情更少的參數:

{%mymathtag廣告%}

退房這對於如何做到這一點的一般描述:Do math using Django template filter?

0

這裏是我的自定義模板標籤解決方案:

from django import template 
from django.template.defaulttags import WidthRatioNode 

register = template.Library() 

class WidthRationExtraNode(WidthRatioNode): 
    def render(self, context): 
     extra = int(self.extra.resolve(context)) 
     value = int(super(WidthRationExtraNode, self).render(context)) 
     return str(value+extra) 
    def __init__(self, val_expr, max_expr, max_width, extra): 
     self.extra = extra 
     super(WidthRationExtraNode, self).__init__(val_expr, max_expr, max_width) 

def widthratioextra(parser, token): 
    bits = token.contents.split() 
    if len(bits) != 5: 
     raise TemplateSyntaxError("widthratio takes four arguments") 
    tag, this_value_expr, max_value_expr, max_width, extra = bits 

    return WidthRationExtraNode(parser.compile_filter(this_value_expr), 
          parser.compile_filter(max_value_expr), 
          parser.compile_filter(max_width), 
          parser.compile_filter(extra)) 
widthratioextra = register.tag(widthratioextra) 

您可以在模板中使用它:

{% widthratioextra a b c d %} 

添加自定義的模板標籤來你的應用是比較容易的,如果你不知道如何做到這一點,這裏是本手冊的相關部分:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

0

只需使用「as」關鍵字:

{%widthratio abc as result%} {{result | add:2}}

相關問題