如何在Django模板文件中声明变量?with标签赋值报错的解决方法
报错核心原因
触发'with' expected at least one variable assignment报错的本质是你混淆了Django模板两类语法的使用边界:
{{ }}双大括号仅用于输出区域的变量渲染,绝对不能嵌套在{% %}模板标签内部使用。你在with标签、if判断里嵌套的{{ }}会被模板解析器识别为普通字符串,根本无法识别到合法的变量赋值逻辑。- 你写的
"{{object.id}}"是带引号的硬编码字符串,不是动态变量引用,解析器找不到合法的赋值源,自然抛出异常。
修正后可正常运行的代码
{% with post_id=object.id %} {% for detail in details %} {% if detail.post.id == post_id %} {{ detail.name }} {% endif %} {% endfor %} {% endwith %}
关键语法提醒
with标签的正确赋值格式为{% with 自定义变量名=原变量路径 %},赋值的变量直接书写字段路径即可,不需要引号、不需要额外嵌套双大括号。- 不建议把新赋值的变量和外层已有变量重名(比如你原代码里把新变量命名为
object,会覆盖视图传入的原始对象,极易引发逻辑混乱),用post_id这类语义清晰的短名更稳妥。 - 只要是写在模板标签内部的变量引用(包括with赋值、if条件比较、for循环迭代路径),统一直接书写变量路径;仅在需要把变量内容输出到HTML页面的位置,使用
{{ }}语法。
内容的提问来源于stack exchange,提问作者Flamiooo
相关产品推荐
相关产品推荐

