如何在Django 1.11.2模板中移除ü、ä、ö实体周围的空格?
我完全懂你的困扰——用striptags处理嵌套链接后,像ß这类特殊字符实体前后被莫名插入了空格,好好的单词被拆得乱七八糟。这是因为striptags在剥离HTML标签时,会用空格分隔标签前后的内容,要是实体刚好在标签附近,就会被带上多余的空格。
这里给你两种靠谱的解决办法:
方法一:自定义模板过滤器(推荐)
直接在模板层面处理,不用改动视图逻辑,很方便。
先在你的Django应用下创建
templatetags文件夹(没有的话新建),里面放两个文件:__init__.py(空文件就行,用来标记这是Python包)custom_filters.py(写我们的自定义过滤器逻辑)
在
custom_filters.py里添加以下代码:
from django import template import re register = template.Library() @register.filter def fix_entity_spaces(text): # 匹配所有被空格包裹的HTML实体,移除前后多余空格 entity_pattern = re.compile(r'\s+(&[a-zA-Z0-9#]+;)\s+') return entity_pattern.sub(r'\1', text)
- 在你的模板文件开头加载这个过滤器:
{% load custom_filters %}
- 修改原来的展示代码,加上我们的自定义过滤器:
<p>{{ object.text|striptags|fix_entity_spaces|safe }}</p>
这样就能自动把au ß ergew ö hnliche变成正确的außergewöhnliche了。
方法二:在视图层处理文本
如果你更习惯在后端处理,也可以在视图里先把文本处理好再传到模板:
from django.shortcuts import render from django.utils.html import strip_tags import re from .models import YourModel # 替换成你的实际模型 def detail_view(request, pk): obj = YourModel.objects.get(pk=pk) # 先剥离HTML标签 stripped_text = strip_tags(obj.text) # 修复实体周围的空格问题 fixed_text = re.sub(r'\s+(&[a-zA-Z0-9#]+;)\s+', r'\1', stripped_text) return render(request, 'your_template.html', { 'object': obj, 'fixed_text': fixed_text })
然后模板里直接用处理好的文本:
<p>{{ fixed_text|safe }}</p>
两种方法都能解决问题,看你更倾向哪种写法~
内容的提问来源于stack exchange,提问作者user9192656
相关产品推荐
相关产品推荐

