Domanda

Sono una persona molto giovane programmatore e sto cercando di fare qualcosa in Python, ma mi sono bloccato. Ho una lista di utenti in CouchDB (utilizzando libreria Python CouchDB & quadro Flask) che hanno un nome utente (che è il _id) ed e-mail. Voglio usare l'elenco di indirizzi email in una casella di selezione in un modello Jinja2.

Il mio primo problema è come accedere gli indirizzi email. Se faccio:

for user in db:
    doc = db[user]
    emails = doc['email']
    print options

I ottenere:

email@domain.com
otheremail@otherdomain.com
yetanotheremail@yetanotherdomain.com

Così posso ottenere la mia lista dei messaggi di posta elettronica. Ma dove la mia inesperienza brutale sta rivelando è che io non so come poi li usa per. La lista esiste solo nel ciclo for. Come faccio a restituire quella lista come una lista utile di variabili? E come faccio poi fare quella lista compaiono nel mio modello Jinja2 in un menu a discesa l'opzione. Credo che ho bisogno di una funzione, ma io sono un programmatore verde.

Sarebbe così apprezzare aiuto.

È stato utile?

Soluzione

Supponendo di avere un modello come:

class User(Document):
    email = TextField()

È possibile utilizzare il metodo load statico della classe utente

users = [User.load(db, uid) for uid in db]

Ora si può fare questo:

for user in users:
    print user.id, user.email  

Ma lo si usa nel pallone così, a suo avviso è possibile inviare questo elenco di utenti al tuo modello utilizzando qualcosa di simile:

from flask import render_template
@app.route("/users")
def show_users():
    users = [User.load(db, uid) for uid in db]
    return render_template('users.html', users=users)

Ora nel modello users.html Jinja2 il seguente output volontà una casella di riepilogo a discesa di ciascun utente e-mail

<select>
{% for user in users %}
    <option value="{{ user.id }}">{{ user.email }}</option>
{% endfor %}
</select>

Inoltre, si sta utilizzando l'estensione Flask-CouchDB? Potrebbe essere utile per astrarre alcuni del basso livello di codifica CouchDB: http: //packages.python. org / Flask-CouchDB /

Disclaimer: Le codice di cui sopra non è stato testato, ma dovrebbe funzionare bene. Non so molto di CouchDB, ma mi è familiare con la boccetta. Inoltre, io ovviamente non includono una piena applicazione della boccetta / CouchDB qui, quindi i bit di codice sono mancanti.

Altri suggerimenti

Si passa i parametri per un modello di Jinja come d dizionario quando si chiama la funzione template.renderfunction(d) (per esempio). Così, si potrebbe fare:

emails = []
for user in db:
    doc = db[user]
    emails.append(doc['email'])
some_jinja_template.render({'list_of_emails' : emails})

Poi, nel modello, si potrebbe fare qualcosa di simile:

<ul>
{% for address in list_of_emails %}
    <li><a href="mailto:{{ address }}">Send email to {{ address }}</a></li>
{% endfor %}
</ul>

Per fare un elenco di messaggi di posta elettronica, per esempio, o gestirli comunque vuoi.

PS -. Sono sicuro che il codice potrebbe essere più elegante / più ottimizzato con una comprensione lista o qualsiasi altra cosa, ma ho pensato che avrei dovuto sottolineare la leggibilità di un cosiddetto programmatore "verde"

lista = [ x for x in db ] # watch out for big databases, you can run out of memory
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top