Accueil » Zope » Forum Zope » Forum Général Zope » variable, python et sql

 question variable, python et sql

Document Actions
Réponses: 4   Visites: 0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant

question variable, python et sql

Posté par suugi le 25/06/2008 17:19
bonjour,
je débute et je galère beaucoup sur le problème suivant:
- j'ai une page web avec une liste d'une cinquantaine de lignes.
- chaque ligne appartient à l'une des 15 catégories prédéfinies et numérotées de 1 à 15.
- il s'agit, en cliquant sur une ligne, de faire passer la catégorie (1 à 15) à la variable nommée varcat de ma_requête Z SQL Method suivante:

SELECT
prelevement.id_prel_activite,
prelevement.lib_prel_activites,
prelevement.produits,
prelevement.observations,
prelevement.A1,
prelevement.A2,
(etc...)
prelevement.A10,
activites.idactivite,
activites.lib_activite
FROM
prelevement,
activites
WHERE
(activites.idactivite = prelevement.id_prel_activite) AND
(activites.idactivite = <dtml-sqlvar varcat type="int">;)

cette requête est ensuite appelée par une page template qui m'affiche le tout dans une page:
<body tal:define="results here/ma_requete;
start request/start|python:0;
batch python:modules['ZTUtils'].Batch(results,
size=30,
start=start);
previous python:batch.previous;
next python:batch.next">
etc ...

lorsque je remplace <dtml-sqlvar varcat type="int"> par un chiffre 1 à 15, cela fonctionne parfaitement, mais je voudrais éviter de créer 15 requêtes quasi-identiques, d'autant que le nombre de catégories peut changer.
Comment faire pour attibuer un nombre à cette variable en cliquant sur une ligne ?

je vous remercie par avance de votre aide.
pour info: navigateur IE6 ou IE7 exclusivement (intranet)
Plone 3, Zope, Python 2.4.4
  •  • Re: variable, python et sql

    Posté par ychaouche le 25/06/2008 20:22
    Tu dois enregistrer le choix de l'utilisateur dans une variable que tu dois passer en argument à ta ZSQLMethod.

    Si tu as des liens, une solution possible serait d'avoir un formulaire invisible et qu'un clique sur le lien valide ce formulaire (par exemple, remplacer le href de chaque lien par javascript:monform.submit()).

    code:
    <form name="categorie1" action="traiterform">
    <input type="hidden" name="varcat" value="1" />
    <a href="javascript:document.categorie1.submit();"> lien 1</a>
    </form>


    Répéter ce code pour chaque lien en mettant la bonne valeur dans varcat.

    Ton formulaire est traité par un script python traiterform qui appelles la ZSQLMethod avec le bon paramètre, puis retourne ton autre page template qui affiche les résultats en lui passant ces derniers en paramètre.
    code:
    #traitementform.py
    # soit "resultats" l'id de la page template qui affiche les resultats, 
    # et "resultats" aussi le nom de son paramètre
    return context.resultats(resultats=context.marequete(context.request.getForm('varcat')))


    Puis dans ta pt resultats.pt

    code:
    <tal:block tal:define="resultats options/resultats">
       <!-- Les résultats sont dans la variable resultats -->
    </tal:block>
  •  • Re: variable, python et sql

    Posté par suugi le 26/06/2008 09:10
    Merci pour les infos. je vais essayer ça aujourd'hui.
  •  • Re: variable, python et sql

    Posté par suugi le 26/06/2008 11:45
    Le formulaire semble fonctionner avec l'appel du script:
    http://localhost:8080/.../traiterform?varcat=1


    par contre, j'ai du mal avec le script python; en remplaçant par mes données, cela donne:

    return context.ma_pagetemplate(ma_pagetemplate=context.ma_requete(context.request.getForm('varcat')))

    et mesage d'erreur <PythonScript at /.../traiterform used for /.../prelevement>
    Line 4
  •  • Re: variable, python et sql

    Posté par ychaouche le 26/06/2008 12:30
    Salut,

    Peux-tu nous donner la trace complète du message d'erreur ? il n'y a rien dans ce que tu as donné qui puisse nous aider à t'aider.