Django templatetag如果包含双括号,则无法正确扩展文本

时间:2019-06-17 21:20:43

标签: python django django-templates templatetags

我正在使用模板标签在Django应用程序中扩展一些TextField(请参见下面的代码)。我在template.html中使用了这样的template-tag:

{% load readmore %}
...

<h4>{{ user.about|readmore:300|safe|linebreaks }}</h4>

这是实际的模板标签,其中包含在我的template.html上扩展文本字段的功能:

readmore.py

from django import template
from django.utils.html import escape
from django.utils.safestring import mark_safe
import re

register = template.Library()

readmore_showscript = ''.join([
"this.parentNode.style.display='none';",
"this.parentNode.parentNode.getElementsByClassName('more')[0].style.display='inline';",
"return false;",

]);

@register.filter
def readmore(txt, showwords=15):
    global readmore_showscript
    words = re.split(r' ', escape(txt))

    if len(words) <= showwords:
        return txt

    # wrap the more part
    words.insert(showwords, '<span class="more" style="display:none;">')
    words.append('</span>')

    # insert the readmore part
    words.insert(showwords, '<span class="readmore">... <a href="#" onclick="')
    words.insert(showwords+1, readmore_showscript)
    words.insert(showwords+2, '">more</a>')
    words.insert(showwords+3, '</span>')

    # Wrap with <p>
    words.insert(0, '<p>')
    words.append('</p>')

    return mark_safe(' '.join(words))

readmore.is_safe = True

此模板标签的问题如下:

如果我要在其上应用此模板标签的TextField包含双括号,则用于扩展Textfield的“按钮”(标记为“更多”-参见:words.insert(showwords+2, '">more</a>')在上面的代码中)被放置在TextField内部我在我的旁边显示...反过来看起来很奇怪,因为它应该在底部,以向用户显示还有更多内容可以阅读。 有人可以向我解释这个问题或提供解决方案,因为从我的角度看,我在这里看不到任何问题。

也许有人有一个类似的模板标签来做这样的事情,并可以与我分享吗?

原始代码段可以找到here

0 个答案:

没有答案