0

Je développe une application pour la planification de la production dans une usine en utilisant appengine/jinja2 et suis coincé avec la façon de demander à l'utilisateur de confirmer si l'application devrait remplacer les données existantes ou supprimer une entité dans le NDB.Confirmer l'écrasement/suppression? (appengine jinja2 python)

Peut-être que quelqu'un peut suggérer un plan d'action?

En product_edit.py je fais ce qui suit (simplifié):

RequestHandler 
... 
execute query and find given product 
template_values = { 
      'prod_id': query.prod_id, 
      'prod_desc': query.prod_desc,       
      } 
template = JINJA_ENVIRONMENT.get_template('/html/product_edit.html') 
self.response.write(template.render(template_values)) 

Le fichier product_edit.html ressemble ci-dessous (j'utilise w3.css).

... 
<form class="w3-container" action="/products-save" method="post"> 
    <label class="w3-text-blue"><b>Product ID</b></label> 
    <input value="{{prod_id}}" name="prod_id_txt" size="15" class="w3-input w3-border"> 
    <br> 
    <label class="w3-text-blue"><b>Product Description</b></label> 
    <input value="{{prod_desc}}" name="prod_(I'm using w3.css)desc_txt" size="50" 

    <input class="w3-btn w3-blue" type="submit" value="Save"> 
</form> 

Il Remplit deux entrées avec l'ID et description du produit provenant de la NDB et fournit un bouton « Enregistrer ». La sauvegarde appelle le gestionnaire de requêtes approprié pour écrire dans le NDB. Donc, je peux écraser l'entité NDB existante, sans problèmes. Mais comment demander à l'utilisateur de confirmer avant d'écraser (ou de supprimer) des données existantes? Dans le gestionnaire de requêtes de sauvegarde de produit, je peux bien sûr afficher une page demandant à l'utilisateur de confirmer, mais en faisant cela, je perds les données du POST d'origine. Une option serait d'envoyer les données au nouveau modèle Jinja2 via des champs cachés, et lors de la confirmation de l'utilisateur enregistrer les données à partir des champs cachés. Cependant, cela ne gagnerait pas un concours de code beuty et est sujette aux erreurs de codage. Y a-t-il quelque chose de plus élégant que je puisse faire?

Pour le formulaire de suppression, je pourrais faire quelque chose avec une fenêtre contextuelle pour demander une confirmation, mais je voudrais utiliser la même méthode que pour la modification afin qu'ils soient visuellement similaires.

Merci d'avance!

Répondre

3

Il y a plusieurs façons d'accomplir ceci. Le moyen le plus simple est de transmettre le formulaire via une fonction javascript avant de le soumettre. Modification:

<input class="w3-btn w3-blue" type="submit" value="Save"> 

à

<div id="saveWithConfirm"> 
    <input class="w3-btn w3-blue" type="button" value="Save" onclick="confirmOverwrite('ask');" /> 
</div> 

alors:

function confirmOverwrite(confirm) { 
    confirmDiv = document.getElementById("saveWithConfirm"); 

    if (confirm == "confirmed") { 
     document.getElementById("ID-of-Form-Here").submit(); 

    } else if (confirm == "ask") { 
     //... if you need to check the database first, do an ajax call here... 
     confirmDiv.innerHTML = '<input class="w3-btn w3-blue" type="button" value="No" onclick="confirmOverwrite(\'no\');" /><input class="w3-btn w3-blue" type="button" value="Yes" onclick="confirmOverwrite(\'confirmed\');" /> '; 

    } else { 
     confirmDiv.innerHTML = '<input class="w3-btn w3-blue" type="button" value="Save" onclick="confirmOverwrite(\'ask\');" /> '; 

    } 
} 

De cette façon, vous ne laissez jamais la forme.

+0

Bonjour GAEfan, merci! J'ai expérimenté votre approche et c'est une solution élégante. Après avoir expérimenté avec, j'ai décidé à la fin d'aller à l'approche avec une page intermédiaire avec des champs cachés pour les raisons suivantes: J'ai eu des problèmes de compatibilité entre javascript et jinja 2 et je voulais me retrouver dans une impasse stree plus tard ; Je n'ai pas commencé avec Ajax et - peut-être le plus important - cela me donne plus de liberté visuelle. Merci! – kxtronic