我一直在創建一個python markdown擴展,當使用自定義標記時,它將在我的django項目中插入一個圖像庫。實際的擴展正在工作,但擴展返回的HTML全部編碼。下面是我使用的擴展:在自定義Python Markdown擴展輸出中禁用HTML編碼
#!/usr/bin/env python
from django.template.loader import render_to_string
from main.models import *
import markdown
version = "0.1.0"
class GalleriaExtension(markdown.Extension):
def __init__(self, configs):
self.config = {
}
# Override defaults with user settings
for key, value in configs:
self.setConfig(key, value)
def add_inline(self, md, name, klass, re):
pattern = klass(re)
pattern.md = md
pattern.ext = self
md.inlinePatterns.add(name, pattern, "<reference")
def extendMarkdown(self, md, md_globals):
self.add_inline(md, 'galleria', Galleria,
r'\[\[(G|g)allery (?P<superpage_id>\w+)\]\]')
class Galleria(markdown.inlinepatterns.Pattern):
def handleMatch(self, m):
try:
images = SuperPage.objects.get(id=m.group('superpage_id')).superpageimage_set.all()
except:
images = None
if images:
rendered = render_to_string('galleria.html', { 'images': images })
else:
rendered = '<b>There are no images for the given ID</b>'
return rendered
def makeExtension(configs=None) :
return GalleriaExtension(configs=configs)
我保證了render_to_string
實際上返回,這不是編碼的HTML。從這裏,外殼是輸出的一個例子:
輸出render_to_string
:
>>> from django.template.loader import render_to_string
>>> images = SuperPage.objects.get(id=8).superpageimage_set.all()
>>> render_to_string('galleria.html', { 'images': images })
u'<div class=\'galleria_std\'>\n <div class=\'gallery\' >\n <div id=\'stage_gallery\' >\n'
下面是markdown
擴展輸出編碼:
>>>markdown.markdown('test [[gallery 8]] test', ['galleria'])
u'<p>test <div class=\'galleria_std\'>\n <div class=\'gallery\' >\n'
我怎樣才能讓rendered
返回HTML在使用降價擴展時標記而不是編碼標記?此外,我會很感激任何關於編碼的指針(語法,佈局等)。我很感激。
您是否找到解決方案? – 2014-11-19 22:40:16