如何消除Django中{% if %}标签产生的多余换行
解决Django纯文本邮件模板多余换行问题
首先明确:spaceless标签只对HTML内容生效,它会移除HTML标签之间的空格,但纯文本模板里的换行、空白完全不在它的处理范围内,所以你用了也没用。
要解决if条件不成立时的多余换行,直接用Django模板的空白控制语法就行——在标签的开头和结尾加-,吃掉标签前后的空白和换行:
修改后的email_template.txt模板如下:
Some random string Some other string ----------------------------------------- {%- if 'firstname' in data -%}firstname: {{data['firstname']}}{%- endif -%} {%- if 'lastname' in data -%}lastname: {{data['lastname']}}{%- endif -%} {%- if 'dob' in data -%}dob: {{data['dob']}}{%- endif -%} {%- if 'route' in data -%}route: {{data['route']}}{%- endif -%} {%- if 'mobile' in data -%}mobile: {{data['mobile']}}{%- endif -%} {%- if 'mail' in data -%}mail: {{data['mail']}}{%- endif -%}
原理说明
{%- ... -%}里的减号会自动移除标签前后的所有空白字符(包括换行、空格、制表符)。当if条件不成立时,整个标签块会被完全移除,连原本标签所在行的换行也不会留下,自然就不会产生多余空行。
如果不想全局处理,也可以只在标签的一侧加-,比如{% if ... -%}只吃掉标签开头的空白,{%- endif %}只吃掉标签结尾的空白,根据你的排版需求调整即可。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

