Шаблонный тег Django не раскрывает текст должным образом, если он содержит двойные скобки - PullRequest
1 голос
/ 18 июня 2019

Я использую шаблон-тег для расширения некоторых TextFields в моем приложении Django (см. Код ниже). Я использую шаблон-тег, как это в моем template.html:

{% 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, к которому я применяю этот шаблон-тег, содержит двойные скобки, кнопка «развернуть» текстовое поле (помеченное как «more» - см .: words.insert(showwords+2, '">more</a>') в коде выше) размещается где-то внутри TextField I отображения со своей стороны ... что, в свою очередь, выглядит довольно странно, потому что оно должно быть внизу, чтобы показать пользователю, что есть еще что читать. Может кто-нибудь объяснить мне эту проблему или предложить решение, потому что с моей точки зрения я не вижу здесь никаких проблем.

Может быть, у кого-то есть похожий шаблон-тег, чтобы сделать что-то подобное, и он может поделиться им со мной?

Оригинальный фрагмент можно найти здесь !

...