2011-05-01 92 views
13

嗨,我使用缩略图插件来获得图像的宽度和高度,现在我想用从缩略图插件变得高度,像定义img标签的填充:django:如何在模板html页面中进行计算?

<img style="padding-top: {{ img.height/2 }}" src=""/> 

但我得到的错误在这里, django不允许这样计算吗?

回答

25

不幸的不是。你需要使用过滤器,像一个add这是建于:

{{ img.height|add:1 }} 

div是没有,不过,你可以自己实现它,虽然:

from django import template 
register = template.Library() 

@register.filter 
def div(value, arg): 
    ''' 
    Divides the value; argument is the divisor. 
    Returns empty string on any error. 
    ''' 
    try: 
     value = int(value) 
     arg = int(arg) 
     if arg: return value/arg 
    except: pass 
    return '' 

的用法是类似的,即:

{{ img.height|div:2 }} 
+0

我可以使用分而负内置的过滤器? – 2011-05-01 14:32:34

+0

这样的过滤器是否存在?文档(http://docs.djangoproject.com/en/1.3/ref/templates/builtins/)没有列出它们,这就是我建议编写自己的原因。 – Xion 2011-05-01 14:34:28

+0

这种事情不会被添加到内置的过滤器:http://code.djangoproject.com/ticket/361 – Acorn 2011-05-01 14:38:46

3

有时候你做模板。以下DjangoSnippet伟大的作品。虽然你可以滥用它,但有时候它会使生活更简单。

ExprTag - Calculating python expression and saving the result to a variable

注:1.3没有测试,但是正常工作与之前的事情。

+0

在Django 1.8中运行正常,但我必须调整异常表达式才能使它们与Python3一致。 – Bobble 2015-07-25 13:50:10

+0

@Bobble:你能分享差异吗?如果你只是想通过电子邮件发送给我,我的地址就在我的[Network Profile](http://stackexchange.com/users/9256/peter-rowell)中。谢谢。 – 2015-07-26 17:57:02

+0

差异文件发送。 – Bobble 2015-07-28 09:17:53

4

有一个Python包,提供了基本的数学Django的模板:https://pypi.python.org/pypi/django-mathfilters

有了这个,你可以做到这一点:

{% load mathfilters %} 
<img style="padding-top: {{ img.height|div:2 }}" src=""/>