Comment faire un redirect Django dans une requete Ajax

Le problème exposé dans ce sujet a été résolu.

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…

+0 -0

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.

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.

+0 -0

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?

+0 -0

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;

...

}
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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