À l'aide de l'Django Balise d'URL dans un Appel AJAX
Il y a BEAUCOUP de post et les pages de discussion de l'utilisation de Django et AJAX, et j'ai lu des centaines au cours de la dernière journée ou alors à la recherche de la réponse à cette question. Un aperçu rapide:
Peut les exemples montrent une codé en dur, URL comme ceci:
$.post("/projects/create/", {"name" : name}, function(data) {...
ou certains utilisent le modèle d'URL de la balise, mais sans paramètres:
$.post("{% url create_project %}", {"name" : name}, function(data) {...
Cependant, j'aimerais inclure un Django style de paramètre dans une URL. Voici ma définition d'url:
url(r'ajax/entity_name/(?P<pk>\w+)/$',EntityAjaxView.as_view(),name='entity_name'),
Oui, je suis en utilisant une classe en fonction de la vue, et il est basé sur la fenêtre detravail. Cet affichage apparaît par défaut pour une valeur de clé primaire à être fourni dans l'URL, et dans un modèle normal je voudrais utiliser:
{% url entity_name id_number %}
de fournir un lien. Dans mon code, je tiens à saisir la valeur saisie dans une zone de saisie de la valeur de clé primaire. Voici un extrait de mon code JavaScript (qui ne fonctionne pas):
var id_number = $('#id_endowmententity_set-' + rownum + '-id_number').val()
$.ajax({
type: "GET",
url: '{% url entity_name id_number %}',
Donc, ma question est, puis-je utiliser le modèle d'URL de la balise avec une valeur à partir d'une zone de saisie?
(Je sais que je pourrais utiliser POST au lieu de GET et de passer le id_number dans le POST de données, mais qui ne fonctionne pas bien avec la fenêtre detravail.)
Merci d'avance pour votre aide.
OriginalL'auteur Dashdrum | 2012-11-12
Vous devez vous connecter pour publier un commentaire.
Django est une application côté serveur. Javascript côté client. Modèles Django se rendait sur le serveur, donc
{% url entity_name id_number %}
est évalué sur le côté serveur, et puis c'est la valeur qui est renvoyée au client. Tout simplement parce que de cela, il est impossible pour vous de combiner des modèles Django avec javascript. Cependant, il ya quelques choses que vous pouvez faire pour résoudre votre problème.Depuis que vous êtes à faire un appel ajax, et l'appel ajax, dépend de certaines entrées de l'utilisateur, généralement le meilleur itinéraire pour le client d'envoyer n'importe quel type d'entrée d'utilisateur pour le serveur en utilisant la querystring (chose après
?
dans l'URL) ou par l'envoi d'unPOST
de données. Donc le plus simple est de changer votre url de ne pas inclure lapk
dans l'url, mais pour la vue d'obtenir que, dans le cadre deGET
ouPOST
de données.et la vue (désolé, je ne suis pas familier avec la classe de vues):
Qui me semble être la solution la plus élégante. Toutefois, si vous avez absolument besoin pour construire l'url sur le côté client, vous pouvez générer un modèle d'url sur le serveur, puis de remplacer toutes les parties dont vous avez besoin sur le côté client pour obtenir l'adresse url complète. Toutefois, cela nécessite plus d'entretien et est donc plus enclins à faire des erreurs. Simple js exemple de cette approche:
OriginalL'auteur miki725