Django模板渲染URL时出现首尾空格问题的解决求助
Django模板Canonical URL首尾空格问题解决
问题场景
模型用CharField存储URL,子模板重写url块处理URL(已用strip方法),但Chrome开发者工具显示canonical标签的URL仍有首尾空格,初始输入的URL本身无空格。
子模板代码:
{% block url %} {% if object.url== '' %} {{ object.old_url}} {% else %} {{ object.url.strip }} {% endif %} {% endblock url %}
base模板代码:
<link rel="canonical" href="{% block url %}{{ request.get_full_path }}{% endblock %}" />
问题原因
模板块内的换行、缩进等空白字符会被Django渲染成空格,即使在变量里用了strip,块本身的空白还是会被保留在输出结果中。另外原代码存在两处语法问题:
- 子模板中
{% end block url %}应为{% endblock url %} - base模板中
{{ {{ request.get_full_path }}多了一个{{,正确写法是{{ request.get_full_path }}
解决方法
方法1:用{% spaceless %}标签消除块内空白
spaceless标签会移除块内HTML标签之间的空白,适合处理这类模板空白导致的问题:
{% block url %} {% spaceless %} {% if object.url == '' %} {{ object.old_url.strip }} {% else %} {{ object.url.strip }} {% endif %} {% endspaceless %} {% endblock url %}
方法2:压缩模板代码到一行
直接去掉模板内的换行和缩进,从写法上避免空白产生:
{% block url %}{% if object.url == '' %}{{ object.old_url.strip }}{% else %}{{ object.url.strip }}{% endif %}{% endblock url %}
方法3:模型层预处理URL(推荐)
从根源解决问题,在保存模型时自动去除URL首尾空格,避免后续模板处理的麻烦:
class YourModel(models.Model): url = models.CharField(max_length=200) old_url = models.CharField(max_length=200) def save(self, *args, **kwargs): # 保存前自动去除首尾空格 self.url = self.url.strip() self.old_url = self.old_url.strip() super().save(*args, **kwargs)
内容的提问来源于stack exchange,提问作者M.N
相关产品推荐
相关产品推荐

