web2py-ckeditor, как отображать форматированный текст, созданный ckeditor, вместо тегов html

Я использую web2py с ckeditor. Я хочу ввести форматированный текст в базу данных с помощью SQLFORM. Поэтому я выбираю ckeditor в качестве виджета поля. Я установил ckeditor и вот мой db.py:

from plugin_ckeditor import CKEditor
ckeditor = CKEditor(db)
db.define_table("comtable",
            Field("com_name",label="name"),
            Field("com_property",label="property",requires=IS_IN_SET(['A', 'B', 'C',"D"])),Field("com_detail",label="info",type="text",widget=ckeditor.widget))

и вот мой default.py/index:

def index():
    form=SQLFORM(db.comtable,fields = ['com_name',"com_property","com_detail"])
    gridform=SQLFORM.smartgrid(db.comtable)
    if form.process().accepted:
        response.flash="OK"
    return dict(form=form,gridform=gridform)

и вот мой index.html:

{{=form}}
{{=gridform}}

После того, как я ввел некоторую информацию в текст с помощью виджета ckeditor, запись отображается в SQLFORM.smartgrid следующим образом: введите здесь описание изображения

Когда я нажимаю кнопку «Просмотр», я получаю следующее: введите здесь описание изображения

Я не хочу отображать текст с html-тегами. Я хочу получить форматированный текст. Может ли кто-нибудь сказать мне, что мне делать или нужно выбрать другой текстовый редактор?

С помощью следующего метода вы сказали мне, что форматированный текст может отображаться, когда я нажимаю кнопку «Просмотр». Однако коды HTML-тегов отображаются, когда я нажимаю кнопку «Изменить». Есть ли способ показать форматированный текст, когда я нажимаю кнопку «Изменить»? Большое Вам спасибо.


person Yibing Liu    schedule 20.11.2015    source источник


Ответы (1)


По умолчанию все данные, включенные в представление, экранированы (в целях безопасности). Чтобы переопределить это, вы можете обернуть содержимое в хелпер XML(). Чтобы сделать это автоматически, вы можете сделать это, указав атрибут represent для соответствующего поля:

Field('com_detail', label='info', type='text', widget=ckeditor.widget,
      represent=lambda content, row: XML(content, sanitize=True))

Функция represent управляет тем, как будут отображаться значения полей в SQLTABLE, SQLFORM.grid, SQLFORM только для чтения и при использовании метода Rows.render.

Параметр sanitize=True ограничивает разрешенные HTML-теги и атрибуты, чтобы свести к минимуму риск для безопасности, связанный с включением пользовательской разметки на страницу. Подробнее о настройке разрешенных тегов и атрибуты.

person Anthony    schedule 20.11.2015
comment
Большое Вам спасибо. Оно работает. Это очень мило с твоей стороны, Энтони. - person Yibing Liu; 21.11.2015
comment
Привет, Энтони. В соответствии с описанным выше методом форматированный текст может отображаться, когда я нажимаю кнопку просмотра. Однако коды тегов HTML отображаются, когда я нажимаю кнопку редактирования. Есть ли способ показать форматированный текст, когда я нажимаю кнопку редактирования? Большое Вам спасибо. - person Yibing Liu; 21.11.2015