Django 3.2.9能否将include模板作为变量传入default过滤器?
在Django 3.2.9中使用include模板作为default过滤器的默认值是否可行?
可以实现这个功能,你给出的示例代码写法是正确的,Django 3.2.x完全支持通过{% include ... as %}语法将模板渲染后的内容存储为变量,并传递给default过滤器作为默认值。
关键细节说明
{% include 'blog/userprofile_deleted.html' as deleted_profile %}会将指定模板渲染后的HTML内容以字符串形式赋值给deleted_profile变量,这个变量可以直接作为default过滤器的参数使用。- 注意过滤器顺序:如果
userprofile_deleted.html模板的输出需要避免自动转义,有两种处理方式:- 将
safe过滤器放在default之后,确保默认内容也能正常渲染HTML:{{ user.profile.bio | default:deleted_profile | safe }} - 在include时添加
is_safe=True参数,告知Django该模板的输出是安全的,无需转义(适合你确认模板内容可信的场景):{% include 'blog/userprofile_deleted.html' as deleted_profile with is_safe=True %} {{ user.profile.bio | safe | default:deleted_profile }}
- 将
- 相比你当前使用的单行字符串写法,用独立模板文件的方式优势明显:不仅更易维护长HTML内容,还能正常解析模板内的标签(比如
{% url %})——而你当前单行字符串中的{% url "register" %}是不会被Django解析的,只会作为纯文本输出。
修正后的示例代码
<div class="row max-h-200 overflow-hidden"> {% include 'blog/userprofile_deleted.html' as deleted_profile %} {{ user.profile.bio | default:deleted_profile | safe }} </div>
内容的提问来源于stack exchange,提问作者Krabs
相关产品推荐
相关产品推荐

