Pregunta

Tengo una vista de Django, y este punto de vista devuelve una tabla que está poblada de forma asíncrona con una llamada AJAX.

Desde el punto de vista del diseño, lo que uno debe seguir a:

  1. la vista django, llamado a través de ajax, devuelve el contenido de la tabla como una respuesta JSON, que contiene marcas HTML para cada celda. El manejador de devolución de llamada javascript toma el contenido y palmadas las mantienen intactas en las celdas de la tabla.
  2. la vista de Django, llamado a través de AJAX, devuelve los datos puros sobre lo que debe ir en la tabla, de nuevo como una respuesta JSON. La devolución de llamada asincrónica JavaScript toma los datos, los formatos con etiquetado correcto, y lo pone en la mesa.

En otras palabras, ¿quién debe tener la responsabilidad de marcado formato del contenido de la celda? la vista o el javascript?

Yo estaría tentado a decir que la primera, ya que la vista ya se devuelve marcado el contenido. Si se devuelve un JSON que contiene contenido marcado, no hay mucha diferencia.

Me gustaría escuchar su punto de vista.

No hay solución correcta

Otros consejos

Si está poblando toda la tabla, usted puede poner su mesa en su propia plantilla y devolver el HTML de la tabla a través de AJAX / JSON.

Se tendrá que modificar la plantilla original para incluir la plantilla de tabla:

 {% include "myapp/_table.html" %}

Y en la vista, que la plantilla vuelva representa como una variable JSON, que su Javascript va a sustituir en:

 return { 'table': render_to_string("myapp/_table.html", context) }

Este enfoque es bueno en el que siempre quiere actualizar toda la tabla, y la prestación de la tabla no requiere el contexto completo. No estoy seguro de lo que el rendimiento es similar, pero es una forma limpia de actualización de la parte de la página, ya que sólo define su mesa una vez.

Depende (como a menudo).

Si se solicita los datos sólo aquí y ahora, sería más fácil y menos propenso a errores a dejar que se hacen en el lado del servidor con el mismo conjunto de plantillas que ya se dictó la vista estándar.

Si usted podría pensar en casos de uso sin embargo, donde serían necesarios los datos en otros lugares (como campos de autocompletar), sería mejor dejar que JavaScript hacer el trabajo y crear una exportación JSON limpia, reutilizable.

Estas opciones se suman a todas las otras respuestas, y, finalmente, le toca a usted decidir.

En un MVP sistema como Django, la vista decide qué datos a visualizar, y el presentador decide cómo debe ser mostrado. Por lo tanto el código JavaScript debe hacer la mayor parte del formato a menos que pruebe intratablemente difícil hacerlo.

Es una buena para practicar Javascript Unabstrusive, también llamada por algunos como Hijax

Por lo tanto, primero tiene una página estándar, que presenta la tabla junto con el resto de la página, con la mesa en un bloque de django-plantilla en particular.

Una vez que tenga esto, se puede incluir la extiende parte de la plantilla de Django dentro de un "si no se ajax", lo que sólo recibe la parte deseada de la tabla en la respuesta Ajax que se puede cargar en el cliente para el div requerido.

Es un-necesario y redundante para mantener el marcado dos veces una vez en el servidor y una vez en el cliente, en javascript.

por lo tanto, prefiero la primera opción, de redering servidor y cliente sólo cargar el HTML representado.

Me he encontrado con esto varias veces antes, y por lo general optan por esta última, donde la vista vuelve JSON pura.

Sin embargo, el enfoque que usted elija debe sin duda dependerá de varios factores, uno de los cuales está dirigida dispositivos (y sus limitaciones de CPU / red). JSON Pure generalmente dará como resultado cargas útiles más pequeñas y por lo tanto puede ser óptimo para dispositivos móviles.

También puede tener sentido para exponer ambas versiones HTML y JSON de su contenido. Esto es especialmente útil si usted está mirando para crear una API muy ligero en algún momento de su sitio.

Por último, se puede utilizar una biblioteca como la de John Resig micro con plantillas o Cierre plantillas para simplificar la generación de HTML del lado del cliente.

Me gustaría ir con la primera opción, sinusoidal que presenta más ventajas para el usuario: la página se carga al instante (sin esperar la llamada asíncrona), hay JS necesario (por ejemplo para el dispositivo móvil)

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