Django-fr

Forum

#1 19-01-2012 12:01:51

sesame
Membre
Inscription : 22-03-2011
Messages : 263

script

bonjour

voila mon probleme

j'ai le template suivant

<table  width="100%"  border="1" style="border: 0.5px;" cellspacing="0" cellpadding="0" >
<div>
<tr bgcolor="dddddd">
<td width="160" <TT><strong>Propriete </strong></TT></td>
<td width="120" <TT><strong>Temperature </strong></TT></td>
<td width="120" <TT><strong>Valeur min </strong></TT></td>
<td width="120" <TT><strong>Valeur max</strong></TT></td>
<td width="120" <TT><strong>Unite</strong></TT></td>

</tr>

<tr>

<form action="{% url upload  %}" method="post">
<p>
<td width="160"  <TT><INPUT type="durete Vickers" value="durete Vickers" name="propriete" onClick="this.form.submit()"/></TT>
</td>
<td width="120"<TT><select name="topic" id= "id_topic"></TT>
<optgroup label="degres">
<option selected="selected" value="0">-- select --</option>
<option value="100">100</option>
<option value="200">200</option>
<option value="300">300</option>
<option value="400">400</option>
<option value="500">500</option>
</optgroup>
</select>
</td>
</p>
   
<td width="120"  <TT> 14 </TT> </td>    {# valeur min #}
<td width="120"  <TT> 19 </TT> </td>    {# valeur max #}
<td width="120" <TT> GPa </TT></td>

</form>

lorsque je clique sur une des temperatures de la liste , ma fonction (du module views) lit un fichier excel et renvoie deux valeurs  (val min et val max) correspondant a la selection

comment renvoyer ces valeurs vers le script .JS    (return json ??) pour ensuite remplacer valeur min et valeur max sans rafraichissement de la page ?

Hors ligne

#2 19-01-2012 12:40:45

Julien Bouquillon [revolunet]
Membre
Inscription : 07-10-2011
Messages : 22

Re : script

Salut

Voici comment tu devrais procéder :

   1. Utiliser jQuery

   2. Pour chaque temperature, créer une div et lui affecter en jquery une
   fonction sur le click.
   ex : $('div.temperature').on('click', function() { // ici javascript
   pour aller chercher le JSON });

   3. Cette fonction javascript fait une requete sur ta vue qui renvoie les
   valeurs en JSON

   4. A la reception du JSON, la fonction appelle une fonction 'callback'
   qui met a jour le contenu des divs min/max avec le JSON recu

Voila je pense qu'il faut que tu te familiarises avec jquery et json pour
mieux comprendre.
un tuto ici : http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery

Il y a également pour info http://www.dajaxproject.com/ qui permet de te
simplifier l'ajax avec Django... ca peut etre pratique.

a+

Julien

Le 19 janvier 2012 12:01, sesame <pat.100 _AT_ hotmail.fr> a écrit :

> bonjour
>
> voila mon probleme
>
> j'ai le template suivant
>
> <table  width="100%"  border="1" style="border: 0.5px;" cellspacing="0"
> cellpadding="0" >
> <div>
> <tr bgcolor="dddddd">
> <td width="160" <TT><strong>Propriete </strong></TT></td>
> <td width="120" <TT><strong>Temperature </strong></TT></td>
> <td width="120" <TT><strong>Valeur min </strong></TT></td>
> <td width="120" <TT><strong>Valeur max</strong></TT></td>
> <td width="120" <TT><strong>Unite</strong></TT></td>
>
> </tr>
>
> <tr>
>
> <form action="{% url upload  %}" method="post">
> <p>
> <td width="160"  <TT><INPUT type="durete Vickers" value="durete Vickers"
> name="propriete" onClick="this.form.submit()"/></TT>
> </td>
> <td width="120"<TT><select name="topic" id= "id_topic"></TT>
> <optgroup label="degres">
> <option selected="selected" value="0">-- select --</option>
> <option value="100">100</option>
> <option value="200">200</option>
> <option value="300">300</option>
> <option value="400">400</option>
> <option value="500">500</option>
> </optgroup>
> </select>
> </td>
> </p>
>
> <td width="120"  <TT> 14 </TT> </td>    {# valeur min #}
> <td width="120"  <TT> 19 </TT> </td>    {# valeur max #}
> <td width="120" <TT> GPa </TT></td>
>
> </form>
>
> lorsque je clique sur une des temperatures de la liste , ma fonction (du
> module views) lit un fichier excel et renvoie deux valeurs  (val min et val
> max) correspondant a la selection
>
> comment renvoyer ces valeurs vers le script .JS    (return json ??) pour
> ensuite remplacer valeur min et valeur max sans rafraichissement de la page
> ?
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#3 19-01-2012 13:21:37

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : script

merci de ta reponse
mais comment avec la vue ce fait le retour des valeurs ?

Hors ligne

#4 19-01-2012 13:25:22

Julien Bouquillon [revolunet]
Membre
Inscription : 07-10-2011
Messages : 22

Re : script

>
> mais comment avec la vue ce fait le retour des valeurs ?

je ne comprends pas cette question

je traduis par : "comment la vue fait pour retourner les valeurs" ?

la vue renvoie simplement le json avec le bon content-type

de mémoire :

datas = {"min": 18, "max": 65}
lejson = simplejson.dumps(datas)
return HttpResponse(lejson, mimetype='application/json')


Le 19 janvier 2012 13:21, sesame <pat.100 _AT_ hotmail.fr> a écrit :

> merci de ta reponse
> mais comment avec la vue ce fait le retour des valeurs ?
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#5 19-01-2012 13:52:10

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : script

c'etais bien cela, encore merci

j'avais déja ecrit dans views.py :
from django.utils import simplejson
c'est un debut..:)

Hors ligne

#6 20-01-2012 07:52:17

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : script

j'ai oublié un detail..
je souhaite qu'en cliquant sur une temperature de la liste deroulante cela remplace (en même temps) valeur min et valeur max par val min et val max renvoyées par la fonction (module views)
on('click', function()  doit agir sur les deux temperatures

Hors ligne

#7 20-01-2012 08:53:21

Vincent
Membre
Inscription : 08-08-2011
Messages : 20

Re : script

C'est exactement le même principe smile

Hors ligne

#8 20-01-2012 11:44:42

Julien Bouquillon
Membre
Inscription : 26-09-2011
Messages : 25

Re : script

Sinon,

si tu as pas trop de résultats possibles, tu peux peut etre faire quelque
chose de plus simple :

tu précharges dans ta page tous les resultats dans une variable javascript
(json passé par la vue):

temperatures = {
    25:{min:12, max:34},
    26:{min:11, max:38},
}

comme ca plus besoin d'ajax, ton jquery va juste chercher les bonnes infos
dans la variable javascript 'temperatures'.

my 2 cents

ju


Le 20 janvier 2012 08:53, Vincent HOTZ <hotzvincent _AT_ gmail.com> a écrit :

> C'est exactement le même principe smile
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#9 20-01-2012 12:18:22

Vincent
Membre
Inscription : 08-08-2011
Messages : 20

Re : script

Effectivement c'est peut être ce qui a de plus robuste et simple, pas besoins de gestion d'erreurs etc

Hors ligne

#10 20-01-2012 13:38:14

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : script

oui mais..
j'aurai peut etre 100 fichiers excel et je ne connais pas le contenu a l'avance
chaque utilisateur aurait a charge de le creer en fonction de ses resultats experimentaux

Hors ligne

#11 20-01-2012 13:56:43

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : script

je suis pas sur d'avoir compris
donc au lieu d'aller chercher deux valeurs min et max
je vais lire le contenu total du fichier..et apres avec jquery,  aller chercher dans la variable javascript les valeurs correspondant a celle selectionnee dans la liste deroulante pour aller les inserer au bon endroit..
(au fait mon template n'est pas en javascript..)

Hors ligne

#12 20-01-2012 14:03:18

Julien Bouquillon
Membre
Inscription : 26-09-2011
Messages : 25

Re : script

C'est une idée, mais si tu as deja les valeurs à l'avance, tu peux, dans
ton template html, ajouter ceci :

<script>
var temperatures = {{ temperatures_json }};
</script>

temperatures_json serait une variable envoyée par ta vue à ton template.

du coup ta fonction click n'aurait plus qu'a chercher dans ces donnees deja
présentes dans la page et mettre a jour les deux résultats.

ex :

$('select.temperatures').on('click', function() {
    var values = temperatures[$(this).val()];
    $('div.tmax').html(values.max);
    $('div.tmin').html(values.min);
});

On s'ecarte de django donc je m'arreterai la sur le javascript.
il faut que tu lises au moins le 'getting started with jquery'

++

ju

Le 20 janvier 2012 13:56, sesame <pat.100 _AT_ hotmail.fr> a écrit :

> je suis pas sur d'avoir compris
> donc au lieu d'aller chercher deux valeurs min et max
> je vais lire le contenu total du fichier..et apres avec jquery,  aller
> chercher dans la variable javascript les valeurs correspondant a celle
> selectionnee dans la liste deroulante pour aller les inserer au bon
> endroit..
> (au fait mon template n'est pas en javascript..)
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#13 20-01-2012 14:35:21

Vincent
Membre
Inscription : 08-08-2011
Messages : 20

Re : script

Oui un template c'est de l'html, mais pas que. Tu peux aussi y écrire du Javascript (et heureusement) et utiliser les mêmes templates tags/filters (boucle for etc) pour générer cette variable. Ou tu la génère coté serveur que tu passe au template sous forme de string si tu veux... tout est possible, faut juste que ton script est accès à la variable avec les valeurs...

Donc, si lors de l'affichage du formulaire tu peut déjà récupérer les valeurs possibles tu créer une variable js (associative array) dans ton script js. Bien sur cet array doit être construit avec les valeurs que peut prendre le champ du formulaire pour récupérer ensuite les bonnes valeurs correspondantes et les afficher (ou autres) avec js/jQuery

Quand tu tape sur Google associative array demistified tu tombe sur un très bon tuto

Au choix, AJAX ou cette technique
(en espérant que les explications sont compréhensibles xD)

EDIT : Grilled x)

Dernière modification par Vincent (20-01-2012 22:14:40)

Hors ligne

#14 21-01-2012 06:07:41

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : script

merci beaucoup de votre aide

Hors ligne

#15 23-01-2012 08:12:19

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : script

return HttpResponse(json_datas, mimetype= 'application/json') de la vue renvoie un message
voulez vous ouvrir ou enregistrer ce fichier ??
je sais pas comment recuperer la variable dans le template..

(j'ai pas encore assez lu le tuto de jquery...peut etre)
comment passer json au template..

Hors ligne

#16 23-01-2012 08:39:01

Vincent
Membre
Inscription : 08-08-2011
Messages : 20

Re : script

En fait à l'aide de jQuery tu fait une requête Http (comme quand un utilisateur/visiteur charge une page) ou tu peux y mettre des variables via GET ou POST que ta vue récupérera, et répondra par ton Json, que tu traite par la suite toujours via jQuery.

Pour debugger : firebug panneau js/réseau.

Hors ligne

#17 23-01-2012 09:52:16

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : script

je passe pourtant par <form action="{% url upload  %}" method="post"> qui ensuite charge le code de la vue

Hors ligne

#18 23-01-2012 10:08:28

Vincent
Membre
Inscription : 08-08-2011
Messages : 20

Re : script

Oui mais là c'est l'url utilisée lors de lenvoi du formulaire

Il faut que tu lance cette requête à l'aide de Javascript/jQuery lorsque un champ est renseigné/une valeur selectionnée dans un select.

Hors ligne

#19 23-01-2012 11:13:13

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : script

faut donc qu je reecrive le code du template..

Hors ligne

#20 23-01-2012 11:45:14

Vincent
Membre
Inscription : 08-08-2011
Messages : 20

Re : script

Bah non, tu remet l'url vers laquelle t'envoyais ton formulaire normalement et après tu fais le javascript.

Un bon tuto pris au hasard : http://webcloud.se/log/AJAX-in-Django-with-jQuery/

Il y a également un passage qui indique que dans la doc (https://docs.djangoproject.com/en/dev/r … csrf/#ajax) tu trouvera un bout de code jQuery pour ne pas avoir d'erreurs avec la protection CSRF

Reprends les indications de Julien (post #2), des tutos, google, du café et du courage et c'est bon wink

Dernière modification par Vincent (28-01-2012 12:33:45)

Hors ligne

#21 23-01-2012 13:34:17

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : script

encore merci, je vais m'accrocher..

Hors ligne

#22 24-01-2012 01:41:33

Teexyhimesymn
Membre
Lieu : Sweden
Inscription : 24-01-2012
Messages : 1
Site Web

Re : script

The Chicago Bears up until matrix Sunday were arguably the most scrutinized 7-3 bandeau in the NFL. In these times at 8-3, most of us who questioned the Bears assist to snuff out the fuck up, on the side of this week anyway.                       
The consider on the Bears was that they weren't on account of reputable, that they were beating up of sub rotten teams, and that they got encouraging to materialization a thrash up Dolphins team. Cutler hadn't to the correspondence literature been unbelievable, but in some begun the Bears were nice games. It wasn't until they knocked off restrictive of the hottest teams and players in the NFL that Bears are in any vocation getting their respect.                       
Heading into the games as 3.5 result underdogs the Bears and Jay Cutler handled the Philadelphia Eagles proving to the siesta of the NFL and their separation that they are in the lecture of the duration of tangible at 8-3 in kasyno, an individual would referee think up that should den without saying, but it doesn't. The Bears had to be victorious in that match to muzzle their haters. The Eagles are legit core, Michael Vick was playing and also any QB can to all intents attainment and the Bears fence in in them down. Cutler stepped up and matched a arrondissement of expertise unsightly with 4 touchdown passes to remain Chicago to a 31-26 success and the steer in the division.                       
In these times, Vick played comfortably, but the Chicago keeping was stingy as reiterative and sober-sided managed to prevent into into the basic body, in some 4 years to describe an interception dippy Mike Vick…Of expeditiousness, that 4 year follow has a puppy sized aster-ix close-fisted it.                       
Okay, so dialect mayhap the Bears are in retaliation for above-board in kasyno. So what's the verdict? Do they watch over break away the Packers and hold original guerdon in the division? It seems the Bears maintain in the offing discovered a divulge up fully undeterred by to Mike Martz's play-calling with their vamoose position, and if Cutler is on easy street to signal on performances like he did on Sunday with a 146.2 passer rating, acuity in their stingy security, this troupe muscle be a sleeper conclude upon!                   
Chicago Bears hush critics, in discern of this week anyway
Chicago Bears hush critics, in the direction of this week anyway
Chicago Bears quietude critics, in position of this week anyway

Hors ligne

#23 30-01-2012 08:32:36

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : script

Bonjour
je commence a arriver a saturation
pourquoi ce script pris dans les exemples fonctionne lorsqu'on charge le fichier html directement
et ne fonctionne plus si on l'appelle via une fonction (views.py) de django

exemple
def home(request):
    return render_to_response('ex1.html')

tout ce qui commence par $. ne passe plus.... sans parler de getjson...

fichier ex1.html

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="utf-8">
   <title>jQuery demo</title>
</head>
<body>
   <a href=" ">Link</a>
  <script type="text/javascript" src="jquery-1.2.6.min.js"></script>   
   <script>
     $(document).ready(function(){
       $("a").click(function(event){
         alert("As you can see, the link no longer took you to jquery.com");
         event.preventDefault();
       });
     });
   </script>
</body>
</html>

Hors ligne

#24 30-01-2012 08:47:38

Vincent
Membre
Inscription : 08-08-2011
Messages : 20

Re : script

Bonjour!

T'as debuggé avec firebug? Tu aurais sûrement trouvé ce qu'il ne va pas smile

Si tout ce qui est lié à $ ne passe pas c'est sûrement que jQuery n'est pas chargé.

Ça marche quand tu ouvre ton template directement puisqu'il trouve le js de jQuery (fichier externe à ta page) mais via django ça ne marche plus puisque tu dois servir ce fichier et t'assurer que le chemin vers celui ci est correct.

Courage!

Hors ligne

#25 30-01-2012 09:16:34

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : script

le fichier jquery-1.2.6.min est dans le même repertoire que le fichier
lorsque je clique sur link j'obtiens

[30/jan 2012 09:07:55] "GET /jquery-1.2.6.min.js HTTP/1.1" 404 2000

ca veut dire qu'il a trouvé le fichier ?

je comprend pas le terme 'servir ce fichier'

Hors ligne

Pied de page des forums