Comment faire un redirect Django dans une requete Ajax

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

J'utilise actuellement une méthode GET qui prend en dur l'url à viser:

1
var lien = "/myApp/addElement/"+idElement;

Le problème c'est que si je souhaite redécouper mon travail pour mettre mon Ajax dans mon fichier statics je doit obligatoirement utiliser Django.redirect pour bien pointer la bon fichier.

1
{% url "addElement" idElement %}

Mais comment faire alors que idElement est ici une variable JavaScript qui ne sera donnée qu'au moment de l'appel via un OnClick() ?

J'ai essayer de le tourner un peu de toute les manières, mais je commence a penser que c'est impossible du fait que Django traduit l'URL au moment de la génération du template… Et je ne connais aucun moyen de retraduire en instantanée…

Édité par Sanoc

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Tu as tout a fait raison, en théorie ce n'est pas possible. Il y a deux possibilités :

Avec les templates tu injecte le resultat d'un reverse vers la racine de ton application (pour avoir le domaine) et tu construit l'url à la main depuis le javascript.

Autre solution, tu utilise des extensions comme celle-ci.

NB: Je ne l'ai jamais utilisé mais j'ai utilisé la même chose avec flask et ça fonctionnait pas mal.

+0 -0
Auteur du sujet

Je vais regarder ton extension, mais malheureusement je vais avoir un conflit de licence si j'utilise son travail.

Cependant l'idée de faire un reverse de la racine n'est pas idiot! Je vais essayer de mettre ça en place.

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Staff

Il y a peut etre d'autres extensions du meme genre. Le prob de construire les url a la mains en JS est que le jour où tu change tes URL, faut penser a les mettre a jour.

+1 -0
Auteur du sujet

Je suis parti sur cette solution qui marche:

1
2
3
4
var baseLien = '{% url "addElement" 1 %}'; //On met un indice de company au pif
var pos = baseLien.lastIndexOf('/'); // On recupère la position du dernier "/"
baseLien = baseLien.substr(0, pos+1); // On récupère que l'URL de base
var lien = baseLien+companyId; //On envoie a la bonne company

Ici je n'ai donc plus le problème de devoir rectifier mes URL comme tu le souligné. Je pense que c'est pas mal non?

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Auteur du sujet

Par contre j'ai complétement oublier le fait que ça ne marcherai pas une fois dans un fichier JS séparer… Problème a moitié résolu donc.

PS:

Toute mes excuses on peut le faire en modifiant le onClick():

1
onclick='deleteElement(this.className, "{% url "deleteElement" 1 %}");'
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
function deleteElement(id, baseLien){

...

var pos = baseLien.lastIndexOf('/'); // position du dernier "/"
baseLien = baseLien.substr(0, pos+1);
var lien = baseLien+companyId;

...

}

Édité par Sanoc

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte