Python / HTML: Wie kann ich eine Datei von einem Ordner im anderen anzeigen?
Ich arbeite an einer Social Media-Webseite.
Auf meiner Profil.html würde ich gerne die hochgeladenen Bilder und Videos von den Nutzern anzeigen.
- Der Ordner mit den hochgeladenen Dateien ist im "blog"-Ordner.
- Meine Profil.html ist im "users"-Ordner.
Ich will, dass man die hochgeladenen Dateien auch auf der Profil.html sieht.
Um die Dateien aus "blog" anzuzeigen, schreibe ich:
<img class="image-style" src="{{ post.file.url }}">
Aber wenn ich das bei der Profile.html verwende, klappt es nicht, da die views.py verschieden sind.
Ich habe versucht:
<img class="image-style" src="{{ ../blog/post.file.url }}">
Aber es wird nur ein leeres Bild angezeigt und der Link kann nicht gefunden werden.
Was muss ich machen, damit ich eine Datei von "blog" in "users" anzeigen kann?
Die Bilder und Videos befinden sich auf einer Datenbank, können somit nicht statisch angezeigt werden.
1 Antwort
Das Symbol post.file.url kennzeichnet eine Variable, die einen Pfad beinhaltet. Du kannst das Symbol nicht so behandeln, als sei es selbst ein Pfad.
Normalerweise würde man Bilder als statische Ressourcen verwalten. Das heißt, du würdest dein Bild in einer Ordnerstruktur wie dieser lagern:
myProject
/static
/myProject
/profile
/image.jpg
Das Bild wird dementsprechend auch geladen:
{% load static %}
<img alt="Some image description ..." class="image-style" src="{% static "myProject/profile/image.jpg" %}">
Mehr dazu kannst du in der Dokumentation nachlesen.
Schau einmal nach, welcher konkrete Wert in post.file.url steht. Diesen musst du anpassen. Wenn es sich bspw. um einen relativen Pfad wie "image.jpg" handelt, sollte eine Stringkonkatenation genügen.
{{ "../blog/" + post.file.url }}
In anderen Fällen benötigst du String-Funktionen (replace u.ä.).
Die Entscheidung, Bilder in der Datenbank zu hinterlegen, würde ich allerdings noch einmal hinterfragen. Der Zugriff über das Dateisystem ist schneller und du kannst die Dateien besser (z.B. für ein Caching oder dynamische Kompressionsalgorithmen) separieren. Es würde genügen, den Dateipfad in der Datenbank zu sichern.
Danke für deine Antwort, aber meine Bilder/Videos befinden sich in einer Datenbank, können also nicht statisch angezeigt werden.