2017-02-26 4 views
2

Ich bin sehr neu in Flask und Web-Entwicklung und habe einige Probleme mit der Erstellung einer Liste von einer Mongdb-Abfrage und die Übergabe an die HTML-Vorlage in einem Dropdown-Menü in Flask.Wählen Sie aus der Dropdown-Liste in der Flasche

Bitte beachten Sie den aktuellen Code unten:

views.py

from flask import render_template 
from app import app 
from pymongo import MongoClient 

@app.route('/') 
@app.route('/index') 

def index(): 

user = {'name': 'Bob'} 

client = MongoClient() 

client = MongoClient('mongodb://localhost:27017/') 
db = client.test_database 
db = client['test-database'] 

collection = db.test_collection 
posts = db.posts 
name_list = [] 

for post in posts.find({'type': "server"}): 
    name_list.append(post['name']) 

# Get selected option and save into variable? 
#if: 
#  choice = x.option 

return render_template("index.html", 
         title='Database selector', 
         user = 'Bob', 
         server_list=name_list) 

server_list enthält: [u'server1' , u'server2' , u'server3' ]

Index .html Vorlage

<html> 
    <head> 
    <title>{{ title }} - Test</title> 
    </head> 
    <body> 
    <h1>Hi, {{ user }}!</h1> 


     <h2>Option selector</h2> 
     <h3><table><form action="" method="POST"> 
      <td> 
      <label>Select :</label> 
      <select name="option" width="300px"> 
      {% for x in server_list %} 
      <option value="{{ x.option }}" SELECTED>{{ x.option }}</option> 
      {% endfor %} 
      </select> 
      </td> 

     </form></table></h3> 


    </body> 
</html> 

Zunächst wird die Auswahlliste nicht ausgefüllt und zweitens, hätte jemand eine Art Vorschläge, wie man das Ergebnis der Auswahl erfasst, damit ich es in einer anderen Datenbankabfrage verwenden und eine zweite Dropdown-Liste generieren kann?

Alle Hinweise sehr geschätzt.

Vielen Dank

Antwort

1

Sie machen einen ziemlich einfachen Fehler. Ich gebe Ihnen hier noch einige zusätzliche Reinigungstipps. Letztendlich ist Ihre Referenz auf x.option in Ihrer Jinja-Syntax falsch. Da es eine einfache Liste ist, sollten Sie einfach x (es hat keine option Eigenschaft) verwenden. Vergessen Sie nicht, endfor und endif-Klauseln zu verwenden.

Python:

@app.route('/') 
@app.route('/index') 
def index(): 
    user = {'name': 'Bob'} 

    client = MongoClient('mongodb://localhost:27017/') 
    db = client['test-database'] 

    collection = db.test_collection 
    posts = db.posts 
    name_list = [p['name'] for p in posts.find({'type': "server"})] 

    return render_template("index.html", 
          title='Database selector', 
          user='Bob', 
          server_list=name_list) 

Jinja/HTML:

{% for x in server_list %} 
<option value="{{ x }}"{% if loop.first %} SELECTED{% endif %}>{{ x }}</option> 
{% endfor %} 
+0

Danke PJ Santoro .. - das war sehr hilfreich - Als Fortsetzung würde Ich mag das Ergebnis zu übergeben der Auswahl zurück zu dem Code, um eine neue Datenbankabfrage zu machen und dann ein zweites Dropdown-Feld auf der gleichen Seite zu füllen. Ich habe Code wie folgt für die Python und Jinja .. aber der übergebene Wert wird nicht korrekt zurückgegeben - würden Sie bitte weitere Gedanken haben? –

+0

wenn request.form [ 'submit'] == 'MYSELECT': Wahl = x sub_name_list = [q [ 'sub_server'] für q in posts.find ({ 'Typ': Wahl})] return render_template ("index.html", title = 'Datenbank Selektor', user = 'Bob', server_list = name_list, sub_server_list = sub_name_list) –

+0