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 页面内进行计算?的主要内容,如果未能解决你的问题,请参考以下文章

Django框架之templates(模板)系统

如何计算 Django 模板中的产品?

如何在 Django 模板中发出外部网站的 HTML?

django的模板页面里,如何获取一个集合的数据?

Django学习模板定制

Django DRY - 如何在 Django 模板中扩展两个 .html 文件?