【问题标题】:How to add custom preprocessor/postprocessor to django-wiki render?如何将自定义预处理器/后处理器添加到 django-wiki 渲染?
【发布时间】:2018-10-24 01:37:28
【问题描述】:
我计划将我的自定义“语法扩展”添加到基于 django-wiki (https://github.com/django-wiki/django-wiki) 的 wiki。
例如我想要这样的东西:
{mytemplate param1="value"}
展开成这样的事情:
<div class="mytemplate"><some_code_that_uses_param1></div>
那么,如何将这样的自定义语法扩展添加到 django-wiki?
(我宁愿在不修改 django-wiki 的源代码的情况下这样做)
【问题讨论】:
标签:
python
django
django-wiki
【解决方案1】:
好的,经过一番挖掘,我找到了解决方案。也许它对某人有用。
Django-wiki 使用 python markdown 模块 (https://github.com/Python-Markdown/markdown)。它在 github 上的文档中有几个损坏的(过时的)示例(希望它们有一天会更新),但经过几次修复后它们仍然可以开始工作。这是降价扩展的工作(使用当前版本的python-markdown)示例:
from markdown.inlinepatterns import Pattern
from markdown.util import etree
from markdown.extensions import Extension
MYPATTERN = r'\{mytemplate (?P<param>\w+)\}'
class EmphasisPattern(Pattern):
def handleMatch(self, m):
el = etree.Element('em')
el.text = m.group('param')
return el
class MyExtension(Extension):
def extendMarkdown(self, md, md_globals):
em = EmphasisPattern(MYPATTERN)
md.inlinePatterns.add('example', em, "<not_strong")
def makeExtension(configs={}):
return MyExtension(configs=configs)
要使其与 django-wiki 一起使用,您应该将 WIKI_MARKDOWN_KWARGS 添加到 django 的 settings.py:
WIKI_MARKDOWN_KWARGS = {
'extensions': [
'my_extenstion_filename_inside_django_project_folder',
]
}