首页 > 编程问答 >TemplateSyntaxError 无法解析其余部分

TemplateSyntaxError 无法解析其余部分

时间:2024-08-02 04:12:01浏览次数:13  
标签:python django jinja2

我的 Django 模板中有一点 jinja2:

{% for filesystem, total_quota, total_usage, df_usage in totals_by_filesystem %}
  <tr>
    <td>{{ filesystem }}</span></td>
    <td>{{ total_quota | filesizeformat }}</td>
    <td>{{ total_usage | filesizeformat }}</td>
    <td>{{ df_usage * 100 }}</td>
  </tr>
{% endfor %}

当我运行它时,我收到此错误消息:

Exception Type: TemplateSyntaxError
Exception Value:    
Could not parse the remainder: ' * 100' from 'df_usage * 100'

我很确定我的语法 {{ df_usage * 100 }} 是正确的。 我在这里缺少什么?


错误消息误导了你。问题不是 df_usage * 100 的语法。Django 的模板语言将 {% ... %} 解释为模板标签,而 {{ ... }} 解释为变量。在 df_usage * 100 中,你正在使用 {{ }} 来包围一个表达式,但 Django 期望在 {{ }} 之间找到一个变量或可求值的表达式,而不是模板标签。

你有两种选择来解决这个问题:

选项 1:使用 Django 的 widthratio 模板标签

Django 有一个内置的模板标签 widthratio 可以用于计算百分比,而无需进行显式乘法。以下是如何使用它的方法:

{% for filesystem, total_quota, total_usage, df_usage in totals_by_filesystem %}
  <tr>
    <td>{{ filesystem }}</td>
    <td>{{ total_quota | filesizeformat }}</td>
    <td>{{ total_usage | filesizeformat }}</td>
    <td>{{ df_usage|widthratio:100|floatformat }}%</td>
  </tr>
{% endfor %}

在这个代码中:

  • {{ df_usage|widthratio:100 }} 计算 df_usage 与 100 的比率。
  • |floatformat 过滤器用于将比率格式化为浮点数,以防它不是。
  • 我们在末尾添加一个 % 符号以显示百分比。

选项 2:在 Python 代码中执行计算

你可以在将数据传递到模板之前在 Python 代码中计算百分比。这将使你的模板更简洁,并能分离逻辑和表示。以下是如何操作:

  1. 在你的视图中:

    ```python for item in totals_by_filesystem: item['percentage_usage'] = item['df_usage'] * 100

    context = {'totals_by_filesystem': totals_by_filesystem, ...} return render(request, 'your_template.html', context) ```

  2. 在你的模板中:

    html {% for filesystem, total_quota, total_usage, percentage_usage in totals_by_filesystem %} <tr> <td>{{ filesystem }}</td> <td>{{ total_quota | filesizeformat }}</td> <td>{{ total_usage | filesizeformat }}</td> <td>{{ percentage_usage|floatformat }}%</td> </tr> {% endfor %}

这种方法将 df_usage 乘以 100,并将结果存储在一个新的字典项 percentage_usage 中。然后,你在模板中使用此新变量,而无需进行任何额外的计算。

标签:python,django,jinja2
From: 78822817

相关文章

  • 白盒测试基础与实践:Python示例及流程图设计
    文章目录前言一、白盒测试是什么?主要特点常用方法优点缺点二、白盒测试常用技术语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖三、程序流程图设计四、测试用例设计1.基本路径法2.语句覆盖3.判断覆盖4.条件覆盖5.判断/条件覆盖6.条件组合覆盖总结......
  • 【python的语法特点,如注释规则、代码缩进、编写规范等】
    介绍一下python的语法特点,如注释规则、代码缩进、编写规范等Python是一种广泛使用的高级编程语言,以其简洁易读的语法、丰富的标准库和强大的第三方库而闻名。下面我将详细介绍Python的一些基本语法特点,包括注释规则、代码缩进、以及编写规范等。一、注释规则Python......
  • 深圳大学-数据科学导论实验-python数据探索
    实验目的与要求掌握python编程基础。掌握数据探索基本操作。实验环境WindowsPyCharm实验数据salaries.csv"","rank","discipline","yrs.since.phd","yrs.service","sex","salary""1","Prof","B",......
  • 基于Python+Django协同过滤算法的招聘信息推荐系统设计与实现(源码+数据库+讲解)
    文章目录前言详细视频演示项目运行截图技术框架后端采用Django框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • python 栈帧沙箱逃逸
    基础理论什么是生成器生成器是python中的一种特殊的迭代器,在每次生成值以后会保留当前状态,以便下次调用可以继续生成值.python中生成器通过yield关键词进行定义,每次调用的时候返回一个值,并保持当前状态的同时暂停函数的执行.当下一次调用生成器的时候,函数会从上次暂停的位......
  • Transformer预测模型及其Python和MATLAB实现
    ###一、背景在自然语言处理(NLP)领域,传统的序列到序列(Seq2Seq)模型大多依赖于循环神经网络(RNN)和长短期记忆(LSTM)网络。这些模型虽然在许多任务中取得了成功,但由于其计算效率低下以及长距离依赖关系处理的不足,导致模型训练时间漫长,并在处理较长文本时效果不佳。2017年,Vaswani等人......
  • 随机森林(Random Forest)预测模型及其特征分析(Python和MATLAB实现)
    ##一、背景在大数据和机器学习的快速发展时代,数据的处理和分析变得尤为重要。随着多个领域积累了海量数据,传统的统计分析方法常常无法满足复杂问题的需求。在这种背景下,机器学习方法开始广泛应用。随机森林(RandomForest)作为一种强大的集成学习方法,因其高效性和较强的泛化能......
  • 自定义Django后台admin
    Django后台自定义一、AdminSite1、AdminSite属性AdminSite属性属性描述site_header管理页面顶部的文字,默认是‘Django管理’site_title<title>末尾放置的文字site_url‘查看网站’链接的urlindex_title管理索引页顶部的文字index_template自定义主要......
  • 【python脚本打包成exe】
    python项目打包成exe安装包分为三部分:1.python项目打包成可执行文件,依赖于一个python插件包pyinstaller        通过pipinstallpyinstaller安装即可。2.将python项目打包成可执行的exe文件及其依赖包        2.1在项目根目录下,输出python项目的配置文件(x......
  • 在Python中,如果想要获取昨天和前天的日期时间,使用datetime模块中的datetime.now()来获
    问:在Python中,如果想要获取昨天和前天的日期时间,使用datetime模块中的datetime.now()来获取当前时间,然后通过减去相应的时间差来得到昨天和前天的日期时间答:在Python中,如果你想要获取昨天和前天的日期时间,你可以使用datetime模块中的datetime.now()来获取当前时间,然后通过减去相......