如何在 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 '&nbsp;' non-breaking space
    text= re.sub('&nbsp;', '', 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 templateregister = template.Library()

以上是关于如何在 django 模板中的一行中显示来自 db 的输出文本的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:如何在视图刀片中的一行中显示来自 DB 的多行

如何在 django 模板中从 for 循环中转义一行

来自上下文的 Django 数据未显示在模板中

Django Python - 如何在一个 HTML 模板中显示来自不同表的信息

我们可以格式化模型表单如何在模板上的 Django 中显示吗

我们可以格式化模型表单如何在模板上的 Django 中显示吗