Question

Pourquoi (par exemple web2py) retournez-vous les données d’un contrôleur dans un dictionnaire au lieu de variables (voir Rails)?

Par exemple:

return dict(sape=4139, guido=4127, jack=4098)

au lieu de (c'est comme ça que Rails le fait)

@var1 = "jello" 
@var2 = "hihi"

Y a-t-il un avantage à utiliser les dictionnaires par rapport aux variables simples (vitesse / code)?

Mise à jour: La méthode ci-dessus est en fait une méthode correcte pour créer un dictionnaire (du moins dans Python 2.6.1). L'autre façon (que beaucoup de gens disent que c'est la bonne)

return {"var1": "jello", "var2": "hihi"} 

n'est pas beaucoup utilisé par les frameworks python.

De la la documentation de Python : "Lorsque les clés sont des chaînes simples, il est parfois plus facile de spécifier des paires à l'aide d'arguments de mots clés:"

dict(sape=4139, guido=4127, jack=4098)
Était-ce utile?

La solution

Le principal avantage est que c’est le seul moyen en python de renvoyer a) plus d’une valeur unique et b) de donner un nom à cette valeur. D'autres options consisteraient à utiliser une classe (code supplémentaire), à ??renvoyer un tuple (aucun nom, il faudrait donc utiliser des index pour accéder aux valeurs) ou à ne renvoyer qu'une seule valeur, ce qui signifierait probablement que tout le monde renverrait une valeur. dictionnaire puisque c'est la solution la plus simple.

Cela permet également d’envelopper plusieurs méthodes et de joindre / fusionner leurs résultats. Enfin, cela permet de renvoyer facilement différents ensembles de paires valeur / nom pour chaque appel, par exemple d’omettre des valeurs facultatives ou de renvoyer des astuces supplémentaires.

Autres conseils

Vous pouvez utiliser des variables locales si vous le souhaitez:

def hello():
    var1 = "whatever you like"
    var2 = "another value"
    return locals() # or vars()

hello.html :

<html><body>
 <p>var1 {{=var1}}</p>
 <p>var2 {{=var2}}</p>
</body></html>

de PHP à Web2py :

  

Dans web2py une requête HTTP pour   " / app / c / f " est mappé dans un appel à   la fonction f () dans le fichier (contrôleur)   c.py dans l’application " app " ;. le   Le fichier c.py est écrit en Python. le   la sortie de la fonction f () peut être une   chaîne (dans ce cas, elle est retournée),   ou un ensemble de variables (implémenté comme   un dictionnaire python). Dans ce dernier   cas les variables sont rendues dans   HTML par un fichier c / f.html, appelé un   vue.

La bonne chose est qu'un moteur de gabarit tel que Jinja2 traite un objet et un dict de la même manière, donc si:

d = {'color': 'red'}
o = Color(red)

puis ceux-ci fonctionnent tous dans la syntaxe du modèle:

d.color d['color'] o.color o['color']
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top