2010-03-17 17 views
12

Im tratando de renderizar una plantilla django desde una base de datos fuera de la estructura de solicitud-respuesta normal de djangos. Pero parece no ser trivial debido a la forma en que se compilan las plantillas de django. Quiero hacer algo como esto:Cargar la plantilla django de la base de datos

>>> s = Template.objects.get(pk = 123).content 
>>> some_method_to_render(s, {'a' : 123, 'b' : 456}) 
>>> ... the rendered output here ... 

¿Cómo se hace esto?

+0

me pregunto cómo se va a actualizar sus plantillas? Va a romper el marco MVC/T django modelo – gath

Respuesta

30

No hay nada complicado en esto, y no tiene nada que ver con la estructura de solicitud/respuesta. Todo lo que necesita hacer es pasar la cadena plantilla en el django.template.Template constructor (Por cierto, he cambiado el nombre de su modelo, para evitar confusiones):

from django.template import Context, Template 
from myapp.models import DbTemplate 

s = DbTemplate.objects.get(pk=123).content 
tpl = Template(s) 
tpl.render(Context(dict(a=123, b=456))) 
+0

2da línea debe decir "tpl = Plantilla (s)" –

+0

@Brian gracias, cambiado. –

+0

Perfecto gracias. –

9

Hay una aplicación reutilizable que carga las plantillas de la base de datos :

http://django-dbtemplates.readthedocs.org/en/latest/

+0

Parece que está abandonado, por desgracia .. Última versión en PyPI es de 2012. – user1496984

+0

@ user1496984 - Pero más en [GitHub] (https://github.com/jazzband/django-dbtemplates) ha sido actualizado hace 6 meses. – Tony

Cuestiones relacionadas