如何在Django模板中将多行条件渲染的input标签简化为单行实现?
解决方案:Django模板单行实现条件赋值
你遇到的问题是混淆了Django模板的变量渲染语法和模板标签语法——你用了{% %}(模板标签块)来写表达式,但这种三元表达式应该放在{{ }}(变量输出块)里。
正确的单行写法应该是:
<input type="text" class="form-control" id="title" value="{{ model.title if model else '' }}" placeholder="Enter Title">
为什么原来的写法报错?
{% %}是用来执行模板标签逻辑(比如if、for循环)的,而你要的是输出一个变量值,所以必须用{{ }}包裹三元表达式。之前的写法把表达式放进了{% %}里,Django会把它当成一个未知的模板标签,自然会报Invalid block tag错误。
另一种可选写法:结合default过滤器
如果你的场景中model存在但model.title可能为空,也可以用default过滤器简化,但要先确保model存在(避免DoesNotExist错误),可以这样写:
<input type="text" class="form-control" id="title" value="{{ model.title|default:'' if model else '' }}" placeholder="Enter Title">
不过第一种三元表达式的写法更直观,也更贴合你的需求场景。
内容的提问来源于stack exchange,提问作者Vaheed01




