Удалите код JavaScript перед рендерингом в шаблонах Django - PullRequest
2 голосов
/ 22 июня 2011
{% if posts %}
    {% for p in posts %}
        {{p|safe}}
    {% endfor %}
{% endif %}

Я хочу, чтобы это отображало HTML, но не JavaScript, что мне делать?

1 Ответ

4 голосов
/ 23 июня 2011

В django нет фильтра, который может делать то, что вам нужно: убрать javascript и оставить html.

Вы можете создать собственный шаблонный фильтр для этого:

from django import template
from django.template.defaultfilters import stringfilter
from django.utils.safestring import mark_safe
from django.utils.encoding import force_unicode
import re

register = template.Library()

@register.filter
@stringfilter
def stripjs(value):
    stripped = re.sub(r'<script(?:\s[^>]*)?(>(?:.(?!/script>))*</script>|/>)', \
                      '', force_unicode(value), flags=re.S)
    return mark_safe(stripped)

(Куда поместить шаблоны фильтров / теги: Пользовательские теги и фильтры шаблонов / Макет кода )

Краткое объяснение:

Создать папку с именем templatetags в папке вашего приложения.Добавьте пустой файл __init__.py (чтобы он был пакетом) и файл модуля, который будет содержать фильтр, my_filters.py.Скопируйте код в этот файл.

В файле шаблона добавьте (перед любым первым использованием фильтра): {% load my_filters %}

Использование:

{% if posts %}
    {% for p in posts %}
        {{ p|stripjs }}
    {% endfor %}
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...