django - Django:模板标签 - 正确的方式?
问题描述
我写了以下简单的模板标签。我想知道在没有 i = 0 和 i + 1 的情况下是否有更好的方法来写这个,或者你会认为这是一个好的解决方案吗?
@register.simple_tag
def taxes(taxes):
i = 0
s = ""
for tax in taxes:
if i is not 0:
s += ", "
s += tax.name
i += 1
output = "Incl. {}".format(s)
return output
作为替代方案,我在我的模板中编写了这个函数。它具有相同的结果,但模板标签对我来说似乎更有条理。
{% spaceless %}
{% for tax in form.initial.ticket.ticket_tax.all %}
{% if forloop.first %}
Incl.
{% else %}
,
{% endif %}
{{ tax.name }} @
{% get_tax_rate tax.percentage %}
{% endfor %}
{% endspaceless %}
更新:
那是新版本:
@register.simple_tag
def show_taxes(taxes):
taxes = ', '.join('{} @ {} %'.format(
tax.name,
round(tax.percentage * 100, 2)
) for tax in taxes)
if taxes:
return 'Incl. {}'.format(taxes)
else:
return ''
解决方案
模板版本似乎很好。但是如果你确实想写一个标签,还有更简单的方法。例如:
taxes = ', '.join('{} @ {}'.format(tax.name, tax.percentage) for tax in taxes)
return 'Incl. {}'.format(taxes)
推荐阅读
- r - 如果横向太长,Bookdown数字标题会失败?
- c# - 对象列表的所有组合。所有的对象都归结为一个单独的对象
- jenkins - 在 Jenkins for Android 项目中集成声纳时出现问题
- garbage-collection - HeapDumpBeforeFullGC应该在生产环境中使用吗?
- fabricjs - FabricJS 2 - 图像没有拉伸到给定的宽度
- reactjs - 第一个 React 应用程序设置:Webpack 已使用与 API 模式不匹配的配置对象进行初始化
- postgresql - 删除表单表不起作用psql
- protractor - 无法单击量角器中的图像
- android - GAv4 丢弃命中。缺少命中类型参数:tid=_GTM_DEFAULT_TRACKER_
- c++ - 无法修改其他线程中 ref 传递的值