Una solución es hacer un script que represente todas las plantillas basadas en un diccionario de entrada de valores de prueba de variables.
La lógica principal para recuperar la lista de variables definidas en las plantillas es la siguiente:
from django.template.loader import get_template
def extract_required_vars(node):
if not hasattr(node, 'nodelist'):
return []
var_names = []
for child_node in node.nodelist:
if isinstance(child_node, VariableNode):
var_names.append(child_node.filter_expression.token)
elif isinstance(child_node, ForNode):
var_names.append(child_node.sequence.var.var)
elif isinstance(child_node, ExtendsNode):
template = get_template(child_node.parent_name.var)
var_names.extend(extract_required_vars(template))
elif isinstance(child_node, IncludeNode):
template = get_template(child_node.template.var)
var_names.extend(extract_required_vars(template))
var_names.extend(extract_required_vars(child_node))
return var_names
required_vars = extract_required_vars(get_template('index.html'))
La secuencia de comandos comprueba que las variables definidas en las plantillas están ya sea en la configuración del proyecto o en el dict siempre por el usuario como entrada de prueba.
/path/to/project/templates/templates/allusers.html
-> ok: users, STATIC_URL
/path/to/project/templates/entrer-en-contact.html
-> ok: contactform, STATIC_URL
/path/to/project/templates/dest-summary.html
-> ok: STATIC_URL
-> missing: dest_username
Más detalles in this blog post.
Gracias :) Lo investigaré. He visto el enlace del fragmento antes, pero el resto es nuevo para mí (y me encanta el concepto de prueba impulsado por la estupidez: D). Sí, supongo que "todos los escenarios posibles" es pedir demasiado; solo el uso de páginas planas puede introducir un montón de HTML no válido en un sitio. Sin embargo, todavía tengo curiosidad de saber si hay soluciones en la veta nombre_aplicación de la prueba manage.py y cómo se compara la practicidad de ese enfoque vs el middleware. Aunque me encanta tu respuesta :) –
Claro, doblala en tu proceso de prueba. No estoy seguro si alguien ha hecho el trabajo duro, pero supongo que necesita una forma de revisar sus URL.py' y generar tantas URL posibles para el sitio como sea posible. Luego puede usar [el cliente de prueba de Django incorporado] (http://docs.djangoproject.com/en/dev/topics/testing/#module-django.test.client) para buscar todas esas URL, y [algo más para validarlos] (http://stackoverflow.com/questions/35538/validate-xhtml-in-python). –
Gracias, creo que sus dos respuestas son todo lo que necesito :) Ahora depende de mí probar lo que funciona mejor para mí y en qué situaciones :) –