如何在Python Django模板中打印换行符

49 投票
5 回答
57661 浏览
提问于 2025-04-15 19:36
{'quotes': u'Live before you die.\n\n"Dream as if you\'ll live forever, live as if you\'ll die today"\n\n"Love one person, take care of them until you die. You know, raise kids. Have a good life. Be a good friend. Try to be completely who you are, figure out what you personally love and go after it with everything you\'ve got no matter how much it takes." -Angelina Jolie.'}

注意我的字典里有换行符:\n

我该怎么在我的模板中显示这些换行呢?

{{quotes|withlinebreaks\n}}

5 个回答

2

所有这些回答都没有明确提到,{{ value|linebreaksbr }} 应该在显示模板中使用,也就是在获取请求的时候,而不是在提交请求的时候。

所以如果你有一个模板来显示比如说 post.details,那应该是这样的:

<h4>Below are the post details</h4>

{{ post.details|linebreaksbr }}

而不是在帖子表单中:

<form method="post">
    {% csrf_token %}
    {{ form|linebreaksbr }}
    <button>Save post</button>
</form>

我也遇到过同样的问题,弄明白之后觉得可能会有人觉得这个信息有用。祝编码愉快!

41

你还可以使用 linebreaksbr 这个过滤器,它可以把所有的换行符直接转换成 <br>,而不需要额外的 <p> 标签。

举个例子:

{{ value|linebreaksbr }}

如果 valueJoel\nis a slug,那么输出结果会是 Joel<br>is a slug

Ignacio 的回答 中的 linebreaks 过滤器不同,linebreaks 会试着猜测文本中的段落,并把每个段落用 <p> 标签包裹起来,而 linebreaksbr 只是简单地 把换行符替换成 <br>

这里有个演示:

>>> from django.template.defaultfilters import linebreaks
>>> from django.template.defaultfilters import linebreaksbr
>>> text = 'One\nbreak\n\nTwo breaks\n\n\nThree breaks'
>>> linebreaks(text)
'<p>One<br />break</p>\n\n<p>Two breaks</p>\n\n<p>Three breaks</p>'
>>> linebreaksbr(text)
'One<br />break<br /><br />Two breaks<br /><br /><br />Three breaks'
111

使用 linebreaks 这个过滤器。

举个例子:

{{ value|linebreaks }}

如果值是 Joel\nis a slug,那么输出结果会是 <p>Joel<br />is a slug</p>

撰写回答