He estado trabajando en la creación de una extensión de marcación python que insertará una galería de imágenes dentro de mi proyecto django cuando se usa una etiqueta personalizada. La extensión real está funcionando, pero el código HTML que devuelve la extensión está codificado. Aquí es la extensión que estoy usando:Deshabilitar la codificación HTML dentro de la salida de reducción de Python personalizada
#!/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)
me aseguré de que el render_to_string
era en realidad regresando HTML que no haya sido codificado. Desde el shell de aquí es un ejemplo de la salida:
salida de 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'
Aquí se emite desde markdown
extensión que está codificado:
>>>markdown.markdown('test [[gallery 8]] test', ['galleria'])
u'<p>test <div class=\'galleria_std\'>\n <div class=\'gallery\' >\n'
¿Cómo puedo hacer rendered
retorno HTML marcar en lugar de marcado codificado cuando se utiliza la extensión de rebaja? Además, agradecería cualquier sugerencia sobre la codificación de esta manera diferente (sintaxis, diseño, etc.). Lo aprecio.
¿Encontró una solución? –