Suchfunktion

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@_verzweifelter_Tim: Na dann schreibt da nicht einfach ``{{ ergebnisse }}`` sondern schaut Euch in der Dokumentation an wie man im Template eine Schleife drüber schreibt, so dass man dann auch die HTML-Tabelle erstellen/füllen kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
_verzweifelter_Tim
User
Beiträge: 8
Registriert: Sonntag 27. Januar 2019, 18:12

Hi black jack. Wir haben die Dokumentation nun öfters angeschaut und haben es versucht. Jedoch haben wir es leider nicht hinbekommen alle Ausgaben einzeln auszugeben. Falls du weißt wie es funktioniert, wäre es möglich das du unseren Code so veränderst das es Funktion? Das wehre sehr freundlich. Danke schon mal in vor raus.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Jinja2, die Template Engine von Flask, kennt `for` Schleifen, womit du über etwas iterierbares - wie bei dir `ergebnisse` - Iterieren kannst. Das funktioniert genau so wie in Python. Du musst halt nur die Syntax-Regeln von Jinja2 einhalten.
Doku: http://jinja.pocoo.org/docs/2.10/templates/
Auf der Seite gibt es auch eine Sektion zu `for`, wobei im allerersten Beispiel schon gezeigt ist, wie das geht.

Gruß, noisefloor
_verzweifelter_Tim
User
Beiträge: 8
Registriert: Sonntag 27. Januar 2019, 18:12

Wir haben es hinbekommen die Daten alle untereinander anzeigen zu lasse, wir sind leider noch zu doof um es einzeln anzeigen lassen zu können. Wir sind die Jinja Dokumentation öfters durch gegangen und haben es immer irgendwie anders versucht jedoch bekommen wir es nicht hin :(

Code: Alles auswählen

{% for nickname in ergebnisse %}
    <li>{% block loop_nickname scoped %}{{ nickname }}{% endblock %}</li>
{% endfor %}
[code]
Des ist das was wir bisher haben
Hier bei wird es alles untereinander aufgelistet aber die Kommas und  "" sind leider immer noch da. 
Danke nochmals das Ihr uns versucht dabei zu helfen. Ich hätte früher in diesem Forum schreiben sollen, dann hätte ich mir über einem Monat arbeit sparen können ,:)
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

`ergebnisse` ist eine Liste von Listen. Heißt: `nickname` ist immer noch eine Liste. Auf die Elemente kannst du per Indexzugriff zugreifen.

Gruß, noisefloor
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

nickname ist kein Nickname, sondern ein Tuple mit drei Elementen. Und man kann entweder Unpacking benutzen, wie unter Python auch, oder per Index auf die Elemente zugreifen.
_verzweifelter_Tim
User
Beiträge: 8
Registriert: Sonntag 27. Januar 2019, 18:12

Hallo noisefloor und sirius,
ich habe nach dem Indexzugriff recherchiert aber leider nichts passendes gefunden und das mit dem unpacking habe ich auch schonmal ausprobiert, habe dies aber leider auch nicht hinbekommen. Ich bin zurzeit ziemlich unter Zeitdruck weil wir schon bald mit dem programmieren fertig sein müssen und unbedingt die Suchfunktion noch richtig hinbekommen wollen. Es wäre super nett wenn einer sich die Zeit nehmen würde und unseren Code so abändern könnte, dass dies funktioniert. Uns fehlen jegliche Grundkenntnisse, welche uns das programmieren erschwert.
Danke nochmals.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@_verzweifelter_Tim: und wieder, ohne zu wissen, was Du versucht hast, ist es schwierig zu helfen.
_verzweifelter_Tim
User
Beiträge: 8
Registriert: Sonntag 27. Januar 2019, 18:12

Ich möchte versuchen das die Daten Nickname, Vorname und Name nicht in einer Liste ausgegeben werden sondern das ich alles einzeln ausgeben kann. Also im prinzip das ich die Werte aus einer Liste herausnehme und sie dann einzeln ausgeben kann. statt das ich in html {{ergebnisse}} schreibe möchte ich es so ausgeben lassen {{Nickname}}{{Vorname}}{{Name}}. Bei der Abfrage sollen trotzdem alle schüler angezeigt werden die halt einen bestimmten namen bzw. nickname oder vorname haben.

Hier sind nochmals mein Python code

Code: Alles auswählen

@app.route('/Suchennn', methods = ['POST'])
def Suchennn():
    try:
        # My SQL Verbidnung Aufbauen
        conn = mysql.connect()
        cursor = conn.cursor()

        anfrage = request.form['inputSuche']
        if not anfrage:
            return render_template('suche.html', ausgabe='Geben Sie einen Namen ein')
            #Durch diese Abfrage kommt die Anzahl aller Nutzer mit dem eigegebenen Nickname, im besten Fall 0>
        cursor.execute(
                'SELECT nickname, vorname, name FROM `schueler` WHERE Name = (%s) OR Nickname =(%s) OR Vorname = (%s);',
                (anfrage, anfrage, anfrage))
            #Denk daran fetchone = nur ein Datensatz, fetchall = alle mit dem Nickname
        ergebnisse = list(cursor.fetchall())

             #hier wird überprüft ob überhaupt ein Nutzer gefunden  wurde
        if not ergebnisse:

            return render_template('suche.html', ausgabe='Es gibt keinen Schüler mit diesem Namen')

        return render_template('Suchen.html', ergebnisse=ergebnisse)



    finally:
        cursor.close()
        conn.close()
und mein jetziger html code

Code: Alles auswählen

<div>
<h1>Suchergebnis:</h1>
    <h5><font color="red">{{ ausgabe }}</font></h5>

{{ ergebnisse }}
<table>
	<tr>
		<td width="20%">Nickname:</td>
		<td>{{ nickname }}</td>
	</tr>
	<tr>
		<td>Vorname:</td>
		<td>{{ vorname }}</td>
	</tr>
	<tr>
		<td>Nachname:</td>
		<td>{{ name }}</td>
	</tr>





</table>

</div>

Danke für die hilfe
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@_verzweifelter_Tim: Die Jinja-Dokumentation wurde ja bereits verlinkt. Und ``for`` wurde ja auch schon erwähnt. Und die Dokumentation hat da auch Beispiele. Und das mit dem ``for`` funktioniert in den Templates fast genau so wie in Python selbst, also insbesondere das „tuple unpacking“. Was in der Jinja2-Doku auch als Beispiel zu sehen ist. So ein bisschen mitdenken, ausprobieren, und verstehen müsst ihr schon selbst.  Das kann euch keiner abnehmen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten