Te recomiendo no poner mucho JavaScript en tus plantillas de Django; tiende a ser difícil de escribir y depurar, especialmente a medida que tu proyecto se expande. En su lugar, intente escribir todo su JavaScript en un archivo de script separado que cargue su plantilla y simplemente incluya solo un objeto de datos JSON en la plantilla. Esto le permite hacer cosas como ejecutar toda su aplicación de JavaScript a través de algo como JSLint, minimizarlo, etc. y puede probarlo con un archivo HTML estático sin dependencias en su aplicación Django. Usar una biblioteca como simplejson también le ahorra el tiempo dedicado a escribir un tedioso código de serialización.
Si no está asumiendo que usted está construyendo una aplicación AJAX esto simplemente podría hacerse así:
En la vista:
from django.utils import simplejson
def view(request, …):
js_data = simplejson.dumps(my_dict)
…
render_template_to_response("my_template.html", {"my_data": js_data, …})
En la plantilla:
<script type="text/javascript">
data_from_django = {{ my_data }};
widget.init(data_from_django);
</script>
Tenga en cuenta que el tipo de datos importa: si my_data
es un número simple o una cadena de una fuente controlada que no contiene HTML, como una fecha formateada, no se requiere un manejo especial. re. Si es posible tener datos no confiables proporcionados por un usuario, tendrá que desinfectarlos usando algo como los filtros escape o escapejs y asegúrese de que su JavaScript maneje los datos de forma segura para evitar los ataques cross-site scripting.
En lo que respecta a las fechas, es posible que también desee pensar en cómo pasar las fechas.Casi siempre me he encontrado que es más fácil de pasar a ellos como marcas de tiempo Unix:
En Django:
time_t = time.mktime(my_date.timetuple())
En JavaScript, asumiendo que has hecho algo así como time_t = {{ time_t }}
con los resultados del fragmento anterior:
my_date = new Date();
my_date.setTime(time_t*1000);
por último, prestar atención a UTC - usted quiere tener los datos de cambio de funciones de fecha Python y Django en UTC para evitar cambios embarazosos de la hora local del usuario.
EDITAR: Tenga en cuenta que setTime en javascript está en milisegundo mientras que la salida de time.mktime es segundos. Es por eso que tenemos que multiplicar por 1000
duplicado Posible [Variables de plantillas de Django y Javascript] (http://stackoverflow.com/questions/298772/django-template-variables-and-javascript) –