发票模板:仅当任何项目有折扣时,才呈现html表格“折扣”列

2024-10-02 16:27:28 发布

您现在位置:Python中文网/ 问答频道 /正文

免责声明,我以前没有使用过Django或Python,因此非常感谢您的帮助/指导

我正在使用Jinja/Django语法编写报价单/发票模板。报价有多个行项目,其中一些项目可能会有折扣。我只想在html表中的任何一个项目有折扣的情况下呈现“折扣”列

我遇到的麻烦是,找出任何一个项目是否有折扣(美元或百分比),然后告诉模板是否有条件地呈现该html。

这是可用行项目数据的简化数组/列表:

lineItems=[
{acv=64000.0
discount=
discount_percentage=
price=64000
quantity=1
name=Item One
id=0}

{acv=44000.0
discount=1500
discount_percentage=
price=44000
quantity=1
name=Item One
id=1}

{acv=2000.0
discount=
discount_percentage=
price=2000
quantity=1
name=Item One
id=2}
]

起初,我想创建一个全局“hasItemDiscount”变量,然后使用for循环遍历列表项并更新折扣值大于0的全局变量

大意如下:

{% set hasItemDiscount = false %}
{% for item in lineItems %}
  {% if item.discount > 0 or item.discount_percentage > 0 %}
  {% set hasItemDiscount = true %}
  {% endif %}
{% endfor %}

{% if hasItemDiscount == true %}
<th scope="col">DISCOUNT</th>
{% endif %}

但是,我意识到不可能从循环的局部上下文更新全局变量。显然,创建一个全局变量也不是一个好主意

注意:我还要补充一点,我必须使用>;运算符或类似运算符,因为系统存在一个小问题,即如果对某个项目应用折扣,然后将其删除,则数据中的属性仍然存在,但为空,例如discount=


最终,html表中需要有条件地呈现两件事:1)表头“折扣”,以及2)如果任何一项有折扣,则折扣的额外表单元需要在所有行项目上呈现,即使它们没有折扣,这样表结构就不会中断

如果列表中没有项目具有折扣,则表标题或列中的关联单元格都不应呈现

希望这足够清楚


Tags: 项目nameid列表htmldiscountitemone