在OrderedDict中找不到元素'html_block'

时间:2015-04-06 17:58:36

标签: python django markdown

使用以下代码时:

 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',

1 个答案:

答案 0 :(得分:1)

您在Python-Markdown中发现了一个错误。具体来说,将safe_mode设置为" escape"之间存在不兼容性。并使用"额外"延期。在引擎盖下,当safe_mode设置为"转义"解析器根本不插入预处理器,该预处理器找到所有HTML块(名为' html_block')。之后,任何HTML都会被转义,因为它没有明确标记为已知的安全HTML。然而,"额外"扩展程序尝试修改' html_block'的行为。预处理器(用于启用" markdown = 1"行为),并且因为您在safe_mode中预处理器不存在且失败。更新:这不是这种情况的问题是accounted for。如下所述,没有错误只是用户错误。

有趣的是,我注意到你有两个"额外"和"脚注"列为扩展名。然而,"脚注"扩展是"额外"的一部分。换句话说,通过加载"额外"你已经得到了#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版本中运行。