Tengo un método en views.py de la siguiente manera:
def index(self, request): initial = get_initial() context = {"context" : initial_topics} template = loader.get_template('index.html') return HttpResponse(template.render(context, request))¿Cómo accedo al dictado de "contexto" en javascript? Como en mi $(función(){});
Puede acceder a la variable de contexto dentro de la etiqueta del script HTML.
Aún así, se aplican algunas reglas:
safe : Advertencia: nunca use un filtro safe en datos que no sean de confianza (como los datos enviados por un usuario). Siempre desinfecte los datos (escape los caracteres no seguros) antes de usar el filtro safe . Lea sobre los ataques XSS para obtener más información.
Ejemplo:
<script> $(function(){ var my_str = "{{ my_str }}"; var my_dict = {{ my_dict|safe }}; // no quotes here var my_list = {{ my_list|safe }}; // no quotes here }); </script> Debe convertir las variables dict y list a json en sus vistas porque si hay palabras clave específicas de Python, como True o False o None en el dict, JS no las entenderá y generará un error.
En JS, las palabras clave equivalentes son true , false y null . Por lo tanto, convertir dictados y listas a json transformará los datos en un formato compatible con JS.
Ejemplo:
import json def my_view(...): my_list = [...] my_dict = {...} context = {'my_list': json.dumps(my_list), 'my_dict': json.dumps(my_dict)} return ... var my_list = {{ my_list|safe }}; var my_dict = {{ my_dict|safe }};Si el código javascript se encuentra en la plantilla html que se está procesando, puede usarlo de la forma habitual {{ context }} . De lo contrario, declare un global en la plantilla html y acceda a ese global desde su archivo js separado.
Si desea insertar en Javascript, asegúrese de usar escapejs, y en casos más avanzados, es posible que deba usar JSON.parse;
var context = "{{ context }}"Si todavía tiene problemas, intente;
var context = JSON.parse("{{ context|escapejs }}");El método JSON.parse() analiza una cadena JSON y construye el valor u objeto de JavaScript descrito por la cadena. Se puede proporcionar una función de reactivación opcional para realizar una transformación en el objeto resultante antes de que se devuelva. doc