Django WYSIWYG编辑的“阅读更多”

时间:2015-03-31 10:30:52

标签: python html django wysiwyg summernote

我使用django-summernote编辑器创建包含文本和图像的帖子,这些文章和图像作为HTML标记保存在字符字段中。

我想添加 read-more 功能,其中为所有帖子显示有限大小的预览。一个想法可能是截断字符字段,但如果它们恰好位于边界之间,则可能导致截断HTML图像标记。

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

Django有两个模板过滤器,可用于确保您的HTML格式不正确:truncatechars_htmltruncatewords_html

模板过滤器只是函数,因此您可以在Python代码中的任何位置导入它们,并将结果分配给您可以在其他地方使用的变量等。

示例:

from django.template.defaultfilters import truncatechars_html

html = """<p>Look, I&#8217;m some HTML. You can truncate me
       with Django template filters</p>"""
truncated_value = truncatechars_html(html, 30)

答案 1 :(得分:0)

我迟到了这个派对,但这篇文章出现在搜索结果中。我自己有一个自定义模板过滤器的解决方案。这允许你像WordPress一样逐个中断。这是我所做的(在this postDjango docs的帮助下):

在文本字段中提交的示例帖子:

<p>Here is some sample text</p> 
<!--more-->
<img src="cool_photo.jpg" />

in templatetags / read_more.py

from django import template
from django.template.defaultfilters import stringfilter

register = template.Library()

@register.filter(name='read_more')
@stringfilter
def read_more(value):
    pattern = "<!--more-->"
    return value.split(pattern, 1)[0]

在呈现截断版本的模板中:

{% load read_more %}
{{ object.body|read_more|safe }}

由于拆分模式是html注释,因此无需从主帖体模板中删除它:

{{ object.body|safe }}