Seite 1 von 1
Flask: Variable an render_template um url_for(..) image zu laden
Verfasst: Freitag 25. Dezember 2020, 19:10
von naheliegend
Hallo,
ich möchte einen Bildnamen an mein html übergeben, sodass dieses nach dem Namen des Bildes mit url_for(..) suchen kann. Aber er findet das Bild nicht...
views:
Code: Alles auswählen
@app.route ("/home")
def home():
image_list = os.listdir(path)
return render_template('home.html', image_list=image_list)
html:
Code: Alles auswählen
<img src="{{ url_for('static', filename='images/image_list[0]')}}"/>
Error: Not Found.
Was mache ich falsch?
LG und schöne Weihnachten
Re: Flask: Variable an render_template um url_for(..) image zu laden
Verfasst: Samstag 26. Dezember 2020, 14:51
von sparrow
Warum willst du dem Template so viel Intelligenz aufbürden?
Ich mache nichts mit Flask, aber ich sehe nicht, wie irgend eine Template-Engine da wissen soll, wo Pfad und wo Variable sich trennen.
Statt eine Liste zu übergeben und da das erste Element in Telplate heraus zu prokeln, würde ich den Pfad im View verfollständigen und den dann übergeben.
Re: Flask: Variable an render_template um url_for(..) image zu laden
Verfasst: Samstag 26. Dezember 2020, 15:19
von naheliegend
Würde halt gerne Bilder bei jeden Aufruf zufällig angeordnet anzeigen lassen und ich würde die übergebene Liste vor jedem Aufruf einmal
, sodass sich die Bilder dann automatisch anders anordnen, weil der Pfad ein anderer ist. Würde ich für jedes Bild den kompletten Link übergeben, dann müsste ich ja 20 Argumente im view übergeben
Re: Flask: Variable an render_template um url_for(..) image zu laden
Verfasst: Samstag 26. Dezember 2020, 16:17
von sparrow
Dann pack die 20 Pfade - oder entsprechende Objekte - in eine Liste, shuffle die und iterier im Template über die Elemente, statt Index-Zugriffe zu verwenden. Oder wolltest du 20 mal die selbe Zeile ins Template schreiben?
Re: Flask: Variable an render_template um url_for(..) image zu laden
Verfasst: Samstag 26. Dezember 2020, 16:54
von naheliegend
Bevor ich etwas Dummes antworte muss ich darüber nachdenken. Danke für den Hinweis.
Re: Flask: Variable an render_template um url_for(..) image zu laden
Verfasst: Samstag 26. Dezember 2020, 21:38
von naheliegend
Habe es glaube ich genau so gemacht wie du meintest:
Code: Alles auswählen
{% for image in image_list %}
<div class="row">
<a href="{{ url_for('static', filename=image) }}" >
<img src="{{ url_for('static', filename=image)}}" class="img-responsive"/>
</a>
</div>
{% endfor %}
Danke. War ein richtiges Aha-Erlebnis.
Re: Flask: Variable an render_template um url_for(..) image zu laden
Verfasst: Dienstag 29. Dezember 2020, 12:26
von naheliegend
Habe noch eine andere Frage:
Versuche mit Flask ein background-image zu einem div zu setzen und habe es jetzt so gemacht:
Code: Alles auswählen
<div class="col" style=" background-image:url(' {{ url_for('static', filename=variabler_pfad)}} ')">
</div>
Aber VSC meckert herum bei 'static':
Sets the background image(s) of an element.
Syntax: <bg-image>#
MDN Reference
) expectedcss(css-rparentexpected)
und bei der letzten Klammer:
semi-colon
expectedcss(css-semicolonexpected)
Aber das div mit den Hintergrundbild wird ordnungsgemäß gerendert.
Re: Flask: Variable an render_template um url_for(..) image zu laden
Verfasst: Dienstag 29. Dezember 2020, 12:49
von __blackjack__
@naheliegend: VSC sieht das halt als CSS und weiss nicht das da Teile *später* mal durch gültiges CSS ersetzt werden. So wie es da steht ist es als CSS fehlerhaft.
Und am Ende fehlt ein Semikolon.
Re: Flask: Variable an render_template um url_for(..) image zu laden
Verfasst: Dienstag 29. Dezember 2020, 13:13
von naheliegend
Wenn ich ein Semikolon schreibe, verschwindet der Fehler nicht.
Kann man nicht Pythonvariablen bis ins stylesheet.css tragen? Oder gibt es eine schönere Variante?
Re: Flask: Variable an render_template um url_for(..) image zu laden
Verfasst: Dienstag 29. Dezember 2020, 16:51
von noisefloor
Hallo,
Kann man nicht Pythonvariablen bis ins stylesheet.css tragen? Oder gibt es eine schönere Variante?
Nee, ist ja eine eigene (statische) Datei. Du kannst aber eine <style>...</style> Sektion in deine HTML-Datei einbauen, die kannst du auch mit Variablen für Jinja befüllen.
Gruß, noisefloor
Re: Flask: Variable an render_template um url_for(..) image zu laden
Verfasst: Dienstag 29. Dezember 2020, 21:44
von naheliegend
Okey, danke für die Antworten