2013-02-23 4 views
3

Я использовал фреймворк pyramid для создания большого веб-приложения.Line Breaking in Chameleon

Помимо прочего, это приложение позволяет пользователю вводить текст в поле формы текстовой области. Этот текст затем сохраняется в базе данных и, конечно же, может быть снова отображен и отображен позже.

Для отображения содержимого используется Chameleon Template Engine.

Это прекрасно работает, за исключением того, что нарушение линии отображается неправильно (не отображается вообще). Вероятно, это связано с тем, что новые строки, введенные в текстовую область, не вызывают новую строку в HTML при отображении через Chameleon. Как это можно исправить?

Это не помогает заменить символы новой строки на <br> -Таги, потому что по умолчанию Chameleon избегает всех HTML-тегов. Я знаю, что дезактивировать эту функцию можно, но я не хочу этого делать, чтобы избежать межсайтового скриптинга.

+0

** больше ** чем? – Tshepang

ответ

2

Вам нужно разбить текст на отдельные строки, затем сделать это с помощью цикла и <br/> теги:

<span tal:omit-tag="" 
     tal:repeat="line text_with_newlines.splitlines()"> 
    ${line}<br /> 
</span> 

Это использует str.splitlines() method разбить текст на переводы строк, то петля добавляет <br /> break tag после каждой строки текста.

Вы совершенно правы, не делая этого в представлении, а затем заставляете Хамелеон принимать ваши вставленные теги <br />, установив флаг structure:. К счастью, в этом нет никакой необходимости.

+0

Спасибо, это работает отлично. – Meneldur

2

Другая возможность состоит в том, чтобы сделать что-то вроде следующего:

import webhelpers.html.tags as t 
s = t.literal(t.BR).join(s.split(t.NL)) 

Конечно, Вы можете создать вспомогательную функцию от него.

+0

Проблема с этим подходом заключается в том, что вам нужно отключить автоматическое выключение HTML Chameleon; вам придется сначала вывести 's' вручную, а затем перевести новые строки в теги разрыва, а затем интерполировать результат с помощью переключателя' structure: '. OP по праву не хочет этого делать; всегда есть риск, когда вы избегаете себя. –

+1

нет, вам не нужно добавлять 'structure:' при выводе объекта типа t.literal (см. Http://sluggo.scrapping.cc/python/WebHelpers/modules/html/builder.html) – born

+0

OP просит что-то использовать в * chameleon * здесь. –