如何在 django 模板中的一行中显示来自 db 的输出文本
Posted
技术标签:
【中文标题】如何在 django 模板中的一行中显示来自 db 的输出文本【英文标题】:how to show output text from db just in one line in django templates 【发布时间】:2021-03-18 01:01:52 【问题描述】:在我的 Django 项目中,我想从我的 PostgreSQL 数据库中读取一些文本并像收件箱中显示的电子邮件一样显示它们。即,每个输出不应有任何换行符(输入)或其他标记。
到目前为止,我已经写过这样的东西:
<div>
<p style="font-size: 15px;"> contact.message |safe|truncatewords:15|cut:"\n" </p>
</div>
我还测试了|striptags
标签而不是|cut:"\n"
。它删除了换行符,但由于我使用的是 CKEditor richtextfield 并且文本有一些标记,因此还会出现一些其他问题。
如何在没有任何换行符和 html 标记的情况下仅显示 1 行文本(最多几个字,例如 15 个)?
感谢任何帮助。
【问题讨论】:
在我的具体情况下,我使用的是带有图像的富文本。我用一堆正则表达式和 if/else 语句制作了自己的自定义模板标签,以处理几种特定情况(文本开头的图像等......) 请提供一些例子。如何制作自定义标签以删除换行符 将示例代码作为答案,其中包含生成自定义标签的详细步骤 【参考方案1】:我为 ckeditor 使用自定义模板标签生成的 html 文本做了类似的事情。我为你的目的重写了它,但没有测试它。
-
在项目设置文件的 INSTALLED_APPS 中列出的应用程序之一中创建一个
templatetags
文件夹。我把我的放在我的 custom_utilities
文件夹下,该文件夹托管了所有定制的实用程序
在templatetags
文件夹内创建一个空白__init__.py
文件
在templatetags
文件夹中创建custom_tags.py
文件。
在custom_tags.py
内部,创建removelinebreaks
函数
from django import template
from django.template.defaultfilters import stringfilter
import re
from django.utils.text import Truncator
register = template.Library()
# register filter
# is_safe is for telling Django that if a “safe” string is passed into your filter, the result will still be “safe” and if a non-safe string is passed in, Django will automatically escape it, if necessary.
@register.filter(is_safe=True)
# only accepts string as the first argument.
@stringfilter
def removelinebreaks(text, num):
print('original text-----')
print(text)
# case insensitive matching of ' ' non-breaking space
text= re.sub(' ', '', text, flags=re.IGNORECASE)
#remove space, tabs, and newlines zero or more times
text= re.sub("<p>\s*</p>","", text, flags=re.MULTILINE)
# remove <br> tag.
text= re.sub("<br>","", text)
print('replaced text-----')
print(text)
# truncate the text
return Truncator(text).chars(num) + '...'
-
在您的模板中,
% load custom_tags %
forumpost.mytext|removelinebreaks:15|safe
-
还要确保重新启动 Django 开发服务器。如果服务器没有重启,Django 不会注册标签。
【讨论】:
刚刚意识到在我的 custom_tags.py 中,我错过了刚才添加的from django import template
和 register = template.Library()
。以上是关于如何在 django 模板中的一行中显示来自 db 的输出文本的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:如何在视图刀片中的一行中显示来自 DB 的多行
Django Python - 如何在一个 HTML 模板中显示来自不同表的信息