Mi pregunta es más un tema de etiqueta que cualquier otra cosa. Estoy desarrollando una aplicación relativamente pequeña que lee datos XML y escribe en una base de datos Oracle y los envía a una página web.
Estoy leyendo el libro "La guía definitiva de Django: desarrollo web bien hecho", básicamente porque aprender algo nuevo es divertido. Reconozco cada vez más solicitudes de ingenieros con experiencia en Django.
En el libro, se recomienda mantener las plantillas html separadas del resto del código (por ejemplo, en archivos .html en su propia carpeta).
¿Hay alguna ventaja al hacerlo, en lugar de simplemente dejar una plantilla html incrustada en mi secuencia de comandos de python?
La plantilla que estoy usando tiene aproximadamente 15 líneas y usa los datos en una lista generada para completar el texto html:
path_to_be_used = desktop_path + 'XURA_output.html' f = open(path_to_be_used, 'w') string = """<html> <head><title>XURA Messaging</title></head> <body> <p>XURA Message contents: the data contained in this page is the Push Notification output retrieved from the XURA server.<br> Upon arrival this data is subsequently written to the Oracle database. """ f.write(string) line1 = "<p><pre>TAG".ljust(28) + "| " + "TEXT".ljust(40) + " </pre>" f.write(line1) for tag in smsreport_list: tagInfo = tag[0] textInfo = tag[1] loop_line = "<pre>" + tagInfo.ljust(20) + "| " + textInfo.ljust(40) + " </pre>" f.write(loop_line) line2 = """</p></body> </html>""" f.write(line2) f.close()Dos cosas que saltan inmediatamente a la mente sobre las plantillas de django son el
Herencia de plantilla
Puede hacer que sus plantillas hereden un comportamiento similar entre ellas, algo que normalmente no puede hacer.
Representar datos de vista en una plantilla
En su código, está pasando datos a su cadena html , en tiempo de ejecución. Puede evitar esto utilizando el lenguaje de plantillas de django que tiene operaciones lógicas como if , elseif y operaciones de bucle como for . También puede pasar datos entre su plantilla html y sus vistas de django de una manera simple y eficiente, lo que hace que sus plantillas sean más "dinámicas".
Eche un vistazo aquí y aquí para ver un ejemplo simple de los dos casos anteriores (lea también el artículo completo ).
La respuesta de John da dos buenas razones. Aquí hay dos más:
Separar las plantillas del código del controlador simplifica ambos. No es necesario saber HTML para trabajar en la función del controlador; no necesita saber Python para trabajar en las plantillas. También es mucho más probable que su editor o IDE proporcione resaltado de sintaxis, finalización, etc. con archivos separados.
Mantener las vistas y los controladores separados (y los modelos también, aunque no esté preguntando por eso) a menudo da como resultado un código que se prueba más fácilmente con herramientas de prueba automatizadas como la biblioteca de pruebas unitarias integrada de unittest . Django aprovecha esta biblioteca para sus propias pruebas. Esto se debe en parte a un menor acoplamiento y posiblemente a una mayor cohesión .