Frage

Ich bin ein sehr junger Programmierer und ich versuche, etwas in Python zu tun, aber ich bin fest. Ich habe eine Liste von Benutzern in CouchDB (mit Python couchdb Bibliothek & Flask-Framework), die einen Benutzernamen haben (was die _id ist) und E-Mail. Ich mag die Liste der E-Mail-Adressen in einer Auswahlbox in einer jinja2 Vorlage verwenden.

Mein erstes Problem ist, wie die E-Mail-Adressen zuzugreifen. Wenn ich das tue:

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

ich:

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

So kann ich meine Liste von E-Mail bekommen. Aber wo mein brutal Unerfahren zeigt nach oben ist, dass ich weiß nicht, wie dann, sie zu benutzen. Die Liste ist nur in der for-Schleife. Wie kehre ich diese Liste als eine verwendbare Liste von Variablen? Und wie kann ich dann diese Liste erscheint in meiner jinja2 Vorlage in einer Option Dropdown-Menü. Ich glaube, ich brauche eine Funktion, aber ich bin ein grüner Programmierer.

würde schätzen, so Hilfe.

War es hilfreich?

Lösung

Unter der Annahme, haben Sie ein Modell wie zum Beispiel:

class User(Document):
    email = TextField()

Sie können die statische Methode load der Benutzerklasse

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

Jetzt können Sie dies tun:

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

Aber Sie verwenden es in der Flasche aus Ihrer Sicht so können Sie senden diese Liste der Benutzer der Vorlage so etwas wie dies mit:

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)

Jetzt im users.html jinja2 Vorlage des folgenden ausgeben wird ein Dropdown-Listenfeld von jedem Benutzer E-Mail

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

Auch sind Sie mit der Kolben-CouchDB Erweiterung? Es könnte in abstrahieren einige der geringen couchdb hilfreich sein Codierung: http: //packages.python. org / Flask-CouchDB /

Disclaimer: Der obige Code wurde nicht getestet, sollte aber gut funktionieren. Ich weiß nicht viel über CouchDB, aber ich bin mit Flask. Auch ich habe offensichtlich keine vollständige Flask / CouchDB Anwendung ist hier, also Bit-Code fehlen.

Andere Tipps

Sie übergeben Parameter an eine jinja Vorlage als Wörterbuch d, wenn Sie die template.renderfunction(d) Funktion (zum Beispiel) nennen. So könnten Sie tun:

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

Dann in der Vorlage, könnten Sie so etwas wie tun:

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

Um eine Liste von E-Mail zu machen, zum Beispiel, oder mit ihnen umgehen aber Sie mögen.

PS -. Ich bin sicher, könnte der Code elegantere / mehr mit einer Liste Verständnis optimierte oder was auch immer, aber ich dachte, ich Lesbarkeit für einen so genannten „grünen“ Programmierer betonen sollte

lista = [ x for x in db ] # watch out for big databases, you can run out of memory
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top