9
votes

Utilisation de l'étiquette de Django URL dans un appel AJAX

Il y a beaucoup de postes et de pages discutant de l'utilisation de Django et d'Ajax, et j'ai lu des centaines au cours de la dernière journée environ à la recherche de la réponse à cette question. Aperçu rapide:

Mai des exemples montrez une URL codée dur comme ceci: p> xxx pré>

ou certains utilisent l'étiquette de modèle d'URL, mais sans paramètres: P>

var id_number = $('#id_endowmententity_set-' + rownum + '-id_number').val()
$.ajax({
    type: "GET",
url: '{% url entity_name id_number %}',


0 commentaires

4 Réponses :


15
votes

Django est une application côté serveur. JavaScript est le côté client. Les modèles Django sont rendus sur le serveur, donc {% URL entity_name id_number%} est évalué sur le côté serveur, puis la valeur est renvoyée au client. Juste à cause de cela, il vous est impossible de combiner les modèles Django avec JavaScript. Cependant, il y a quelques points de choses que vous pouvez faire pour résoudre votre problème.

Puisque vous faites un appel AJAX, et que l'appel AJAX dépend d'une entrée de l'utilisateur, généralement le meilleur itinéraire du client pour envoyer tout type d'entrée utilisateur à Le serveur est en utilisant QueryString (chose après ? dans l'URL) ou en envoyant un post . Donc, la chose la plus simple est de modifier votre URL pour ne pas inclure le pk dans l'URL, mais pour la vue pour obtenir cela dans le cadre de obtenir ou poste < / code> données. xxx

et la vue (désolé je ne suis pas familier avec des vues basées sur la classe): xxx

qui me semble être la solution la plus élégante. Si toutefois, vous devez absolument construire l'URL du côté du client, vous pouvez générer une URL de modèle du côté serveur, puis remplacer les pièces dont vous avez besoin sur le côté du client pour obtenir l'URL complète. Cela nécessite toutefois plus de maintenance et est donc plus sujet aux erreurs. Simple JS Exemple de cette approche: xxx


1 commentaires

J'ai essayé d'utiliser un rappel Ajax avec une URL nommée de mon Vue de la fonction comme err_key = "{% URL 'pcd_list"%} " et utilisez-le pour créer un lien sur l'appelant page en utilisant $ ('# ajxerr'). HTML (var_err + ' chèque '); var_err_url est une variable pour la valeur err_key revenue de l'appel d'Ajax. Mais il échoue. Cependant, si j'utilise err_key = "path_génerated_from_named_url" dans ma vue de fonction, cela fonctionne. Existe-t-il un moyen d'utiliser l'URL nommée comme j'ai essayé dans le premier exemple ci-dessus ?



3
votes

Il est possible de définir une URL AJAX sur l'élément que vous sélectionnez à l'aide d'un attribut et cela se comportera comme Django URL. Surtout, vous pouvez même accéder à l'URL dans le fichier JavaScript. Je l'utilise beaucoup HTML

path('api/chart/data', views.ChartData.as_view(), name="chart-data"),


1 commentaires

Je pense que c'est la meilleure réponse qu'aujourd'hui pour beaucoup d'utilisations. Par exemple, j'ai que je dois peupler avec des appels Ajax. Pour cela, j'utilise l'URL de données sur la table même qui doit être renseignée de cette façon. Facile à chercher et à utiliser dans JQuery. Assurez-vous simplement de protéger vos points d'extrémité contre les appels non autorisés.



0
votes

Il suffit de faire un voyage aller-retour à un serveur pour aller chercher une URL. La meilleure stratégie pour garder les URL sèches et éviter que cela consiste à générer JavaScript qui émule la fonction URL Native URL Inverse de DJANGO, puis servez ce code statiquement avec le reste de votre côté client JS.

Django-rendrier-statique fait exactement cela.


0 commentaires

0
votes

Cela a fonctionné pour moi. Mon URL était:

chemin ('MyURL / ', vues.myfunction, nom = 'myfunction')

My View.py Fichier: < / p> xxx

dans mon modèle, j'ai résolu le problème de: xxx


0 commentaires