django:如何在模板 html 页面内进行计算?
Posted
技术标签:
【中文标题】django:如何在模板 html 页面内进行计算?【英文标题】:django: how to do calculation inside the template html page? 【发布时间】:2011-08-16 11:29:00 【问题描述】:您好,我正在使用缩略图插件来获取图像的宽度和高度,现在我想使用从缩略图插件中获取的高度来定义 img 标签的填充,例如:
<img style="padding-top: img.height / 2 " src=""/>
但是我这里出错了,django不允许这样计算吗?
【问题讨论】:
【参考方案1】:对于您示例中的 CSS,您可以使用 calc()。
<img style="padding-top: calc( img.height / 2)" src=""/>
【讨论】:
【参考方案2】:很遗憾没有。您需要使用过滤器,例如内置的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
【讨论】:
我可以使用除法和减法内置过滤器吗? 这样的过滤器存在吗?文档 (docs.djangoproject.com/en/1.3/ref/templates/builtins) 没有列出它们,这就是我建议自己编写的原因。 这种东西是不会添加到内置过滤器中的:code.djangoproject.com/ticket/361 我真的很讨厌 try/except: pass 语句。我想这取决于您传递给 div 的数据,但我觉得最好有例外,所以如果工程师犯错误,您至少知道它而不是返回值 '' 而且它也不能四舍五入。例如7/3
?【参考方案3】:
有一个 Python 包可以为 Django 模板提供基本的数学运算:https://pypi.python.org/pypi/django-mathfilters
有了这个,你就可以做到:
% load mathfilters %
<img style="padding-top: img.height|div:2 " src=""/>
【讨论】:
【参考方案4】:有时您只是必须在模板中执行此操作。以下DjangoSnippet 效果很好。尽管您可以滥用它,但有时它会让生活更简单®。
ExprTag - Calculating python expression and saving the result to a variable
注意:未在 1.3 中测试,但在此之前可以正常工作。
【讨论】:
适用于 Django 1.8,但我必须调整异常表达式以使其与 Python3 保持一致。 @Bobble:你能分享一下差异吗?如果您只想通过电子邮件将它们发送给我,我的地址在我的Network Profile 中。谢谢。以上是关于django:如何在模板 html 页面内进行计算?的主要内容,如果未能解决你的问题,请参考以下文章