Ich versuche, ein Bild über den Django-Administrator hochzuladen und es dann entweder auf einer Seite im Frontend oder nur über eine URL anzuzeigen.
Beachten Sie, dass dies alles auf meinem lokalen Computer ist.
Meine Einstellungen sind wie folgt:
MEDIA_ROOT = '/home/dan/mysite/media/'
MEDIA_URL = '/media/'
Ich habe den Parameter upload_to auf 'images' gesetzt und die Datei wurde korrekt in das Verzeichnis hochgeladen:
'/home/dan/mysite/media/images/myimage.png'
Wenn ich jedoch versuche, unter der folgenden URL auf das Bild zuzugreifen:
http://127.0.0.1:8000/media/images/myimage.png
Ich erhalte einen 404-Fehler.
Muss ich bestimmte URLconf-Muster für hochgeladene Medien einrichten?
Jeder Rat geschätzt.
Vielen Dank.
^
vorher ein Zeichen hinzuzufügenmedia//(?P<path>.*)$
. Manchmal, wenn wir auf die Mediendatei im App-URL-Pfad (wiehttp://127.0.0.1:8000/myapp/media/img/logo.png
) zugreifen , wird dies nicht berechnet.Bitte lesen Sie das offizielle Django DOC sorgfältig durch und Sie werden die passendste Antwort finden.
Der beste und einfachste Weg, dies zu lösen, ist wie folgt.
quelle
if settings.DEV
Überprüfung zu belassen, da er automatisch deaktiviert wird?Für Django 1.9 müssen Sie den folgenden Code gemäß der Dokumentation hinzufügen:
Weitere Informationen finden Sie hier: https://docs.djangoproject.com/de/1.9/howto/static-files/#serving-files-uploaded-by-a-user-during-development
quelle
Hier, was ich in Django 2.0 gemacht habe. Setzen Sie zuerst MEDIA_ROOT und MEDIA_URL in
setting.py
Aktivieren Sie dann das
media
context_processors
InTEMPLATE_CONTEXT_PROCESSORS
durch HinzufügenIhr
media context processor
ist aktiviert. Jetzt enthält jederRequestContext
eine VariableMEDIA_URL
.Jetzt können Sie in Ihrem darauf zugreifen
template_name.html
quelle
Ja. Für die Entwicklung ist es so einfach wie das Hinzufügen zu Ihrer URLconf:
Für die Produktion sollten Sie die Medien jedoch mit Apache, lighttpd, nginx oder Ihrem bevorzugten Webserver bereitstellen.
quelle
(zumindest) für Django 1.8:
Wenn du benutzt
Stellen Sie wie oben beschrieben sicher, dass in urlpatterns = [] kein URL-Muster "Alle abfangen", das zu einer Standardansicht führt, davor steht. Da .append das hinzugefügte Schema an das Ende der Liste setzt, wird es natürlich nur getestet, wenn kein vorheriges URL-Muster übereinstimmt. Sie können dies vermeiden, indem Sie so etwas verwenden, bei dem das URL-Muster "catch all" ganz am Ende hinzugefügt wird, unabhängig von der if-Anweisung:
quelle
Hier sind die Änderungen, die ich vornehmen musste, um PDFs für die Django-Publikations- App mit Django 1.10.6 bereitzustellen:
Verwendete dieselben Definitionen für Medienverzeichnisse wie Sie in
settings.py
:Wie von @thisisashwanipandey bereitgestellt, im Hauptprojekt
urls.py
:und eine Modifikation der Antwort von @ r-allela in
settings.py
:quelle
Ein weiteres Problem, mit dem Sie wahrscheinlich konfrontiert werden, nachdem Sie alle URLconf-Muster eingerichtet haben, ist, dass die Variable
{{ MEDIA_URL }}
in Ihren Vorlagen nicht funktioniert. Um dies zu beheben , stellen Sie in Ihrer settings.py sicher, dass Sie hinzufügenin deinem
TEMPLATE_CONTEXT_PROCESSORS
.quelle
Hinzufügen zu Micah Carrick Antwort für Django 1.8:
quelle
TypeError: view must be a callable or a list/tuple in the case of include().
.Dies habe ich getan, um in Python 3.6 mit Django 1.11 das Rendern von Bildern im DEBUG = False-Modus zu erreichen
quelle
Befolgen Sie die oben genannten Schritte für => 3.0 für den Debug-Modus
Und auch der Teil, der mich auffiel , die obige statische URL funktionierte nur in meiner Hauptprojekt-URL urls.py. Ich habe zuerst versucht, meiner App etwas hinzuzufügen, und mich gefragt, warum ich die Bilder nicht sehen konnte.
Stellen Sie zuletzt sicher, dass Sie Folgendes einstellen:
quelle
Dies gilt für Django 1.10:
quelle
Ihre Einstellung ist in Ordnung. Einige Webserver müssen die Medien- und statischen Ordnerdateien speziell angeben. In pythonanywhere.com müssen Sie beispielsweise zum Abschnitt "Web" gehen und die URL der Medienordner und des statischen Ordners hinzufügen. Beispielsweise:
Ich weiß, dass es spät ist, aber nur um denen zu helfen, die diesen Link wegen des gleichen Problems besuchen;)
quelle