You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将模板变量拼接后传入json_script模板标签?

解决Django模板中先拼接变量再传入json_script的问题

问题核心

需要先将模板变量sensorname与字符串"-data"拼接成目标名称,再将该名称作为参数传给json_script模板标签,而非先处理values再追加字符串。

可行解决方案

方案1:修正{% with %}标签的用法

Django的add过滤器支持字符串拼接(若sensorname为字符串类型),正确使用with标签提前拼接变量,再传入json_script:

{% with sensor_data_id=sensorname|add:"-data" %}
    {{ values|json_script:sensor_data_id }}
{% endwith %}

如果sensorname是数值类型,需先转成字符串(搭配stringformat:"s"过滤器):

{% with sensor_data_id=sensorname|stringformat:"s"|add:"-data" %}
    {{ values|json_script:sensor_data_id }}
{% endwith %}

方案2:利用括号调整自定义过滤器的执行优先级

你已经定义了combined自定义过滤器,只需用括号改变执行顺序,让模板先处理拼接逻辑,再将结果传给json_script:

{{ values|json_script:(sensorname|combined:"-data") }}

Django 1.10及以上版本支持用括号包裹表达式调整优先级,这样会先执行括号内的sensorname|combined:"-data"得到拼接后的ID,再将其作为json_script的参数,生成正确的JSON脚本标签。

为什么之前的写法失效?

模板过滤器默认按从左到右的顺序执行,你之前写的{{ values|json_script:sensorname|combined:"-data" }}会先将values处理为ID是sensorname的JSON脚本HTML,再对这段HTML字符串执行combined:"-data",最终导致在HTML代码后追加"-data",完全偏离预期。

内容的提问来源于stack exchange,提问作者xtlc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:34:55