No dudes en compartir nuestros tutoriales y códigos en tus redes, apóyanos para hacer crecer esta comunidad.
Solución:
Creo que la mejor manera de hacer esto es crear un html data-*
attribute con la URL representada en una plantilla y luego use javascript para recuperar eso.
De esta manera, evita mezclar elementos de plantilla js/django. Además, mantengo todo mi JS en un archivo separado fuera de la vista (que es una práctica mucho mejor en general) y, por lo tanto, tratar de mezclar estos dos no funcionará.
Por ejemplo, si tiene una URL que desea, simplemente cree un elemento oculto html:
Luego, en tu JS:
$(document).on('click', '.alink', function ()
var url = $("#Url").attr("data-url");
);
Con frecuencia uso este patrón para las listas desplegables, de modo que no tengo que mostrar todas las opciones cuando renderizo la página por primera vez (y esto generalmente lo acelera).
Está intentando acceder a la variable javascript que se crea cuando el usuario hace clic en el frontend dentro de su plantilla de Django en el backend. Pero, ya sabes que no funcionaría.
Una mejor opción sería reconstruir la url en javascript:
$(document).on('click', '.alink', function ()
// Generate URL without "id" bit
var url = "% url 'myapp:productdetail' %";
var id = $(this).attr('id');
// Construct the full URL with "id"
document.location.href = url + "/" + id;
);
Si no tiene un ayudante de url de django que devuelva una URL que necesita, puede imprimir cualquiera y simplemente reemplazarlo en javascript así:
$(document).on('click', '.alink', function ()
var url = "% url 'myapp:productdetail' 123 %";
var id = $(this).attr('id');
// Construct the full URL with "id"
document.location.href = url.replace('123', id);
);
El problema parece estar en que usas el lenguaje de plantilla django en js static archivo (¿tengo razón?) Intente mover esa variable al archivo de plantilla html, por ejemplo:
Y en static archivo js:
document.location.href = a;
Eres capaz de añadir valor a nuestro contenido colaborando tu veteranía en los comentarios.