¿Cómo debo validar HTML en las plantillas de Django durante el proceso de desarrollo?

StackOverflow https://stackoverflow.com/questions/3086637

  •  28-09-2019
  •  | 
  •  

Pregunta

No he utilizado Django y Python incorporado en la prueba de capacidades todavía, pero quiero empezar por último ... Y una de las cosas más obvias que me gustaría mantener bajo control durante todo el proceso de desarrollo es que todos mis páginas validan en todos los escenarios posibles.

¿Cuál es la mejor manera de hacer esto?

¿Fue útil?

Solución

Buena pregunta. No he hecho esto por mí mismo, por lo que se espera que haya algunas respuestas mejores, pero es posible que desee ver en la validación HTML middleware:

“en todos los escenarios posibles” podría ser demasiado pedir para, en función de su aplicación. Por ejemplo si se hace el siguiente Facebook, y por lo tanto está aceptando enormes cantidades de datos de usuarios cada día, algo va a venir en algún momento que se rompe la validez de una página en su sitio.

A medida que los errores de validación no tienden a destruir la funcionalidad, podría ser un enfoque aceptable para comprobar con algunos datos de prueba limitadas, a continuación, reaccionar a errores a medida que surgen. Creo que esto es conocido como estupidez impulsada por las pruebas .

Otros consejos

Por otra parte, un enfoque para liar su propia para la validación de páginas en su sitio durante el proceso de prueba de la unidad habitual sería algo como esto:

  1. Ir a través de su urls.py y generar el mayor número de posibles direcciones URL para el sitio como sea posible
  2. la incorporada en el cliente de prueba Django a buscar a cada una de esas direcciones URL
  3. Validar ellos de alguna manera (Ver quizá Validar (X) HTML en Python )

No está seguro de si alguien ha hecho ningún trabajo sobre este tema es una forma reutilizable.

Una solución es hacer un script que hace que todas las plantillas basadas en un diccionario de entrada de valores de prueba 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 proporcionada 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

en esta entrada de blog .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top