Расширенный текстовый редактор в админке Django - Скрытие тегов HTML в списке изменений - PullRequest
3 голосов
/ 15 февраля 2012

Я занимаюсь разработкой проекта Django, в котором администраторы могут стилизовать некоторый контент с помощью TinyMCE.Все работает отлично, за исключением досадных деталей.

Для некоторых моделей бывает, что поле, отредактированное в режиме расширенного текста, должно быть показано в списке изменений.Что происходит, так это то, что это поле отображается с его HTML-тегами.Я хотел бы, чтобы в списке изменений был эквивалент

{{ field|striptags }}

.

К сожалению, все не так просто, как переопределение шаблона администратора, так как контент уже поступает вшаблон, завернутый в админ HTML (<td>).Поэтому, если я просто заменю

<tr class="{% cycle 'row1' 'row2' %}">{% for item in result %}{{ item }}{% endfor %}</tr>

на

<tr class="{% cycle 'row1' 'row2' %}">{% for item in result %}{{ item|striptags }}{% endfor %}</tr>

внутри 'admin / templates / change_list_results.html', таблица результатов будет выглядеть без стиля.

Какмогу ли я иметь приличный предварительный просмотр этих полей в списке изменений?

Ответы [ 2 ]

6 голосов
/ 15 февраля 2012

Вы можете создать дополнительное свойство в вашей модели, которое возвращает зачищенное поле, и использовать его в list_display.

class YourClass(models.Model):
    ....

    @property
    def html_stripped(self):
       from django.utils.html import strip_tags
       return strip_tags(self.html_field)

и в вашем ModelAdmin:

list_display = ['html_stripped', ...]

В документах по list_display упоминается несколько других вариантов и дается более подробная информация по этой теме.

2 голосов
/ 15 февраля 2012

Если проблема в том, что вы не хотите видеть теги, но хотите, чтобы они отображались, вы можете попробовать это:

from django.utils.safestring import mark_safe
class SomeModel(models.Model):
    some_field = models.CharField(max_length=50)
    def some_field_html(self) :
        return mark_safe(self.some_field)

, а затем в администраторе модели используйте list_display .

list_display = ('some_field_html')

"Несколько особых случаев, которые нужно отметить относительно list_display: ... Если данная строка является методом модели, ModelAdmin или вызываемой, Django будет выводить HTML-выводпо умолчанию. Если вы не хотите выходить из выходных данных метода, используйте функцию mark_safe при возврате. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...