你可以去django shell,看看什麼文字記錄在object.video.description?
video.description被定義爲html字符串的方式(我猜測<
已被轉義爲<
,因此安全無助)。標記爲安全可以防止django在模板中呈現之前將<
轉換爲<
;但不會將包含<
的字符串轉換爲<
。
如果該字符串最初保存與<
S和>
是你可以把它們通過一個簡單的Python更換某處你的字符串處理轉換爲<
和>
。例如,在你看來做這樣的事情:
htmlCodes = (('&', '&'),
('<', '<'),
('>', '>'),
('"', '"'),
("'", '''),)
def unescape(some_html_str):
for c, html_code in htmlCodes:
some_html_str = some_html_str.replace(html_code, c)
return some_html_str
,然後記得把它在上下文(和還記得以紀念它的安全)之前,你取消轉義字符串中您的視圖。 見How do I perform HTML decoding/encoding using Python/Django?
而且它可能是更好/更容易讓你在你的視圖使用mark_safe
(from django.utils.safestring import mark_safe
),以確保只有安全的弦標記爲可安全,而不是讓你的模板總是渲染的東西是安全的。
這假設video.description是用markdown寫的:例如,一個到wikipedia的降價頁面的鏈接是[[some_text](http://en.wikipedia.org/wiki/Markdown))。現在,如果用戶正在編寫文本說明,那麼使用標記語言https://docs.djangoproject.com/en/1.3/ref/contrib/markup/是一個非常好的主意(而不是讓用戶在他們可以插入的地方編寫原始html JavaScript的說一個CSRF攻擊或JavaScript彈出式窗口或其他)。 – 2011-05-31 20:41:32
對不起,是的,我的答案應該符合jimbob博士所說的要求! – 2011-05-31 20:48:56