Django过滤器返回将在模板中呈现的HTML

时间:2018-08-23 13:17:18

标签: django django-templates django-filters

my_text

my_text = '''The template system works in a two-step process: compiling and rendering. A compiled template is, simply, a list of Node objects.

Thus, to define a custom template tag, you specify how the raw template tag is converted into a Node (the compilation function), and what the node’s render() method does.'''

my_filter

@register.filter(is_safe=True)
def format_description(description):
    text = ''
    for i in description.split('\n'):
        text += ('<p class="site-description">' + i + '</p>')
    return text

我的问题

我像这样在原始html中获取输出

 <p class="site-description">The template system works in a two-step process: compiling and rendering. A compiled template is, simply, a list of Node objects.</p><p class="site-description">    </p><p class="site-description">    Thus, to define a custom template tag, you specify how the raw template tag is converted into a Node (the compilation function), and what the node’s render() method does.</p>

代替

  

模板系统分两步工作   过程:编译和渲染。简单来说,一个已编译的模板是   节点对象列表。

因此,要定义自定义模板标签,   您可以指定原始模板标签如何转换为节点(   编译函数)以及节点的render()方法的作用。

想法

想法是获取文本并为拆分后创建的列表的每个部分创建不同的段落,以便可以将文本格式化为漂亮的 和密封性

2 个答案:

答案 0 :(得分:2)

要禁用自动转义,可以使用mark_safe方法:

from django.utils.safestring import mark_safe

@register.filter(is_safe=True)
def format_description(description):
    text = ''
    for i in description.split('\n'):
        text += ('<p class="site-description">' + i + '</p>')
    return mark_safe(text)

答案 1 :(得分:2)

文档Filters and auto-escaping中对此进行了明确说明。

您需要将输出标记为安全。

from django.utils.safestring import mark_safe
...
return mark_safe(text)