1
votes

Django avec requête ajax

J'ai ci-dessous le code

path('member/search/',
         views.displayModalView, name="display_modal"),

Comment exécuter le code ci-dessus en cliquant sur un bouton dans le langage de création de modèles django. l'url est comme

function OpenModal()
{
 var fname="Quartz";
 var mname="Rohit";
 var lname="Patel";

 var url="{% url 'display_modal' %}"+fname +"/"+mname+"/"+lname;
 alert(url);
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            document.getElementById('divcontent').innerHTML=this.responseText;
        }
    };
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
}


0 commentaires

3 Réponses :


0
votes

Je pense que vous pouvez utiliser une requête jQuery Ajax dans une méthode click () normale, comme décrit ici: Documentation W3C

Dans ce cas, cependant, je pense que vous devez déclarer l'url comme TemplateAsView , donc vous pouvez dire à Django de renvoyer immédiatement un modèle au lieu d'exécuter une vue Django , comme décrit dans doc . Dans le modèle, vous pouvez exécuter la fonction, comme vous le souhaitez, par exemple dans le modèle, vous pouvez insérer un appel à votre fonction sur le document prêt, et l'exécuter lorsque le DOM est chargé, comme décrit ici .

Pour ce faire, vous devez changer l'URL, car une view.someView est faite pour rechercher, dans votre view.py , la déclaration de la fonction someView , mais votre fonction est un Javascript donc, je suppose, vous la mettez dans le code du modèle.

Je vois que votre code est une fonction Javascript, donc j'essaie de comprendre pourquoi vous devez appeler une fonction comme celle-ci avec le système de template Django, en tant qu'appel de template, et vous ne pouvez pas appeler la fonction directement. Je pense qu'en faisant ce que vous voulez, vous forcez un rechargement du DOM à chaque fois et, je pense, il existe plusieurs méthodes pour ouvrir un modal sans actualisation de page.


1 commentaires

Je veux ouvrir une fenêtre modale. Aussi dans la fenêtre modale, je veux passer le paramètre de la fenêtre principale à la fenêtre modale. C'est pourquoi j'ai utilisé les paramètres fname, mname, lname. Si j'utilise var url = "{% url 'display_modal' Quartz Rohit Patel%} alors j'obtiens le résultat souhaité. Mais je veux passer des paramètres.



0
votes

Vous pouvez ajouter un clic à votre bouton et la valeur de celui-ci doit être égale à votre fonction comme ceci

function show(){
        something else ...
}

------------------------------ javascript ------ --------------------------------------------

XXX

vous pouvez également consulter la documentation de jquery


0 commentaires

1
votes

Ce que fait ajax empêchera une page de se recharger, c'est la magie de ajax. Donc, si vous fournissez chemin , cela peut être utilisé pour recharger la page.

Html:

import json
from django.http import HttpResponse
def displayModalView(request):
    #do what ever you want but at the end return Httpresponse with dictionary if you want 
     to use dictionary in your ajax call.
   param123 = {'test': "Hello_world"}
   return HttpResponse(json.dumps(param123))

urls.py: quelle url fait-elle correspondre à l'expression régulière avec votre URL mentionnée. le paramètre name = 'display_modal' et l ' url: "{% url' display_modal '%}" que vous mentionnez dans l'appel ajax seraient identiques.

    from django.conf.urls import url
    urlpatterns = [
        url(r'^display_modal', views.displayModalView, name='display_modal')
    ]

views.py:

<script>
        function OpenModal(){
         var fname="Quartz";
         var mname="Rohit";
         var lname="Patel";
            $.ajax({
                type:'POST',
                url: "{% url 'display_modal' %}",
                data: { csrfmiddlewaretoken: '{{ csrf_token }}'},
                success: function(param123){
                    dict1 = JSON.parse(param123);
                    let data1 = dict1.test;
                    alert("Successful call do what ever you want");
                    alert(data1);
                },
                error: function(){
                    alert("sorry");
                }
            });
        }
</script>


2 commentaires

Je veux avoir une demande d'obtention et passer trois paramètres à savoir fname, mname et lname à mes vues dans le cas ci-dessus, son displayModalView (request, fname, mname, lname)


Merci pour l'indice. J'ai la solution. J'ai remplacé les données: {fname, mname, lname} et path ('member / search / $', cela a fonctionné pour moi.