Найти - Пользователи
Полная версия: Шаблоны и разметка
Начало » Django » Шаблоны и разметка
1 2
walter
И снова здравствуйте. У меня очередной кризис жанра и соответственно вопрос. Сам я использую Google App Engine, но шаблоны в нем Django'вские. Пока использовались шаблоны от версии 0.96 все было нормально, но с переходом на версию 1.2 возникли вопросы. А именно - я использую унифицированный шаблон для отображения данных. Фактически каждая статья состоит из заголовка, тела статьи и даты ее публикации. Шаблон соответственно простенький
{% extends "index.html" %}
{% block content %}
<h2>{{ section_title }}</h2>
<p>{{ body }}</p>
<p>{{ publication }}</p>
{% endblock %}
В теле статьи пользователь сам делает разметку средствами tinyMCE (можно использовать и Markdown и все что угодно, не в этом суть). В шаблонах 0.96 версии разметка срабатывала как и ожидалось, но в версии 1.2 HTML-теги преобразовались в HTML-сущности. Конечно можно использоовать теги safe, или autoescape, но тогда теряется смысл использования шаблона новой версии. Хранить в БД только текст а разметку полностью перенести в шаблон? Но тогда на каждую статью придется делать отдельный шаблон и, что самое главное, пользователь их уже не сможет редактировать. Вообщем я застопорился. Коллеги, подскажите, как вы решаете эту проблему у себя.
appetito
в чем проблема-то? {{ body|safe }} написать вместо {{ body}} проблема?
walter
appetito
в чем проблема-то? {{ body|safe }} написать вместо {{ body}} проблема?
Не проблема. И я об этом упоминал. Но, если фильтрующий режим предусмотрен в шаблоне как режим по-умолчанию, то использование safe - это уже своего рода хак, пусть и предусмотренный разработчиком фреймворка, поскольку нарушается та логика шаблона которую заложили разработчики. Я пытаюсь понять, как авторы Джанги представляют себе использование шаблонов на динамических страницах с установками по умолчанию. Не думаю, что журналисты, ради которых Джанго и делалась, занимаются помимо публикации материала, еще и созданием шаблонов для каждой своей статьи. Т.е. должно быть какое-то средство позволяющее этот материал отформатировать.

Допустим, сидит человек и выпускает ленту новостей. В одной статье ему нужно упорядочить часть данных в виде списка, в другой вставить картинку, в третьей выделить строку курсивом и т.д. Тот же визивиг редактор позволяет это все сделать и разметка идет в БД вместе с текстом, но вот доходит очередь до отображения информации и вместо размеченного текста мыполучаем текст с вкраплениями тегов. Добаляем в шаблон теги safe, или autoescape off и получаем шаблон с устаревшей логикой поведения.

Тогда, ради чего в Джанго по-умолчанию шаблоны с autoescape on и как отображать статьи не изменяя логику поведения шаблона?

Т.е. я не понимаю зачем в шаблоне логика, которая будет в большинстве случаев отключена. А если этих случаев не большинство, то подскажите, где я ошибаюсь?
slav0nic
бред пишешь, safe сделали для защиты от xss и тп, короче для безопасности.
Защита от дурака.

С чего вы взяли что джанга для журналистов, тоже не ясно. Её уже давно пилят люди, которые далеки от разработки чисто новостников и журналистики в целом.
walter
slav0nic
бред пишешь, safe сделали для защиты от xss и тп, короче для безопасности.
Защита от дурака.
Ну почему сразу бред? Просто высказываю мысль. То что поведение шаблонов изменили для протиовдействия xss мне известно. Но не логично как-то. Подобную защиту ИМХО надо ставить на входящие данные. Т.е. получается, что, в моем случае, надо делать {{ body|safe }}, но при этом еще и проверять данные наполняющие body, экраинрование то отключено. Вот именно это отсутствие централизованности меня и смущает. Если данные при записи в БД проверялись, то зачем их еще и в представлении шерстить? А если не проверять перед записью, то как тогда отображать одинаковые по классу ( в данном случае статьи), но разные по разметке данные?

slav0nic
С чего вы взяли что джанга для журналистов, тоже не ясно. Её уже давно пилят люди, которые далеки от разработки чисто новостников и журналистики в целом.
Про журналистов я вспомнил, т.к. это самый подходящий пример.
slav0nic
какой же вы упрямый) это стандартная методика когда что-то запрещается. Представьте, что вы забыли что-то заескейпить - это повлияет на безопасность. А при текущем подходе - нет.
Хотите делать в коде - попробуйте mark_safe() или используйте {% autoescape off %} в шаблоне, но я б за такое руки отрывал)
slav0nic
А если не проверять перед записью, то как тогда отображать одинаковые по классу ( в данном случае статьи), но разные по разметке данные?
делать как во всех номральных система, храня флаг указывающий разметку …
складывается впечатление, что вы очередная жертва рнр :)
walter
slav0nic
делать как во всех номральных система, храня флаг указывающий разметку …
Можно об этом подробнее?
slav0nic
эм ну я обычно делаю 2 поля
грубо говоря body и body_rendered (ну или body_html) + 1 поле флаг, где хранится разметка, запись оригинальной записи идёт в body и в def save() рендерится согласно выбранной разметки в body_rendered в виде html. Ну и при выводе информации информация берётся с body_rendered.

Ты бы что ли почитал код блогов, форумов и тп. Это классический подход.
walter
slav0nic
эм ну я обычно делаю 2 поля
грубо говоря body и body_rendered (ну или body_html) + 1 поле флаг, где хранится разметка, запись оригинальной записи идёт в body и в def save() рендерится согласно выбранной разметки в body_rendered в виде html. Ну и при выводе информации информация берётся с body_rendered.

Ты бы что ли почитал код блогов, форумов и тп. Это классический подход.
Фу-у-ух! Что-то я совсем в ступор впал. Дай, пожалуйста, ссылки на примеры.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB