使用以下代码时:
MARKDOWN_KWARGS = {
'extensions': [
'footnotes',
'attr_list',
'headerid',
'extra',
'codehilite',
],
'safe_mode': 'escape',
我收到以下错误:
Django Version: 1.6.11
Exception Type: ValueError
Exception Value:
Element 'html_block' was not found in OrderedDict
Exception Location: /usr/local/lib/python2.7/site-packages/markdown/odict.py in index, line 149
Python Executable: /usr/local/bin/python
Python Version: 2.7.9
为什么呢?我该怎么做才能解决它?
已删除' safe_mode':' escape',
答案 0 :(得分:1)
您在Python-Markdown中发现了一个错误。具体来说,将更新:这不是这种情况的问题是accounted for。如下所述,没有错误只是用户错误。safe_mode
设置为" escape"之间存在不兼容性。并使用"额外"延期。在引擎盖下,当safe_mode
设置为"转义"解析器根本不插入预处理器,该预处理器找到所有HTML块(名为' html_block')。之后,任何HTML都会被转义,因为它没有明确标记为已知的安全HTML。然而,"额外"扩展程序尝试修改' html_block'的行为。预处理器(用于启用" markdown = 1"行为),并且因为您在safe_mode
中预处理器不存在且失败。
有趣的是,我注意到你有两个"额外"和"脚注"列为扩展名。然而,"脚注"扩展是"额外"的一部分。换句话说,通过加载"额外"你已经得到了#34;脚注"而且不需要再加载它。对于" attr_list"也可以这样说。这是造成错误的原因。尝试两次加载相同的扩展名。事实上,完整的扩展名单" extra"您可以找到here:
- 缩写
- 属性列表
- 定义列表
- 围栏代码块
- 脚注
- 表
- Smart Strong
唯一可以通过单独加载每个扩展而不是全部加在一起作为" extra"更少打字和"降价= 1" feature(允许在原始HTML块中解析Markdown)。有趣的是,如果您使用的是safe_mode
,那么" markdown = 1" " extra"的特点对你没用。因此,而不是加载"额外"您只需加载上面列出的每个扩展程序,然后safe_mode
仍然有用。
尽管如此,safe_mode
正在deprecated,并且在下一版本的Python-Markdown中将不再可用。正如发行说明中所解释的那样,在使用safe_mode
之后,您应该通过降价转换为HTML,将不受信任的内容通过HTML清理程序(如Bleach)传递:
import bleach
html = bleach.clean(markdown.markdown(text), **MARKDOWN_KWARGS)
如果你这样做,那么在从不受信任的来源解析降价时你仍然可以获得一些安全性,你不会遇到上面提到的错误,你的代码将继续在未来的Python-Markdown版本中运行。