Django: Probleme mit static und media

Django, Flask, Bottle, WSGI, CGI…
Antworten
gomez72
User
Beiträge: 71
Registriert: Sonntag 28. März 2021, 09:57

Hallo,
ich habe eine Webapp entwickelt, in der ich static pics in templates aufgerufen habe - alles funktionierte.
Jetzt wollte ich, dass der user ein profil Bild hochladen kann, also habe ich mir das Media Thema angesehen.
Das Hochladen eines Bildes und das jeweilige anzeigen aus einem Template welches auf Media zugreift funktioniert auch.

… auf Wunsch des Verfassers wegen sensitiven Informationen gelöscht.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Grundsätlich müssen wir mal zwei Dinge voneinander unterscheiden:

static files:
Das sind _statische_ Dateien, die deine Webanwendung braucht. Die sind dieshalb statisch, weil sie sich nie ändern.

media files:
Sind Dateien, die von einem Benutzer geändert werden können.

Das hier ist die entscheidende Fehlermeldung:

Code: Alles auswählen

The joined path (D:\dev\projects\web_saat_kalender\static_root\plant\img\62_1.jpg) is located outside of the base path component (D:\dev\projects\web_saat_kalender\media)
Jetzt sehe ich in deiner urls.py die URLs für media. Aber wo sind denn die für static?

Das wäre die erste Anpassung (ungetestet):

Code: Alles auswählen

from django.contrib import admin
from django.urls import path, include

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('main.urls')),
    path('plant/', include('plant.urls')),
    path('seed/', include('seed.urls')),
    path('manual_faq/', include('manual_faq.urls')),
    path("accounts/", include("django.contrib.auth.urls")),
    path("members/", include('members.urls')),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

admin.site.index_title = "Saat-Zeit"
admin.site.site_header = "saat-zeit admin backend"
admin.site.site_title = "admin backend"
gomez72
User
Beiträge: 71
Registriert: Sonntag 28. März 2021, 09:57

Hallo Danke für die Antwort, ja den Unterschied von static und media hatte ich verstanden.
Habe gerade deine Änderungen getestet. Hat sich nichts verbessert, leider.

vg Manuel
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Aber default_storage agiert dort, wo deine media files hochgeladen werden. Also in %MEDIA_ROOT%.
Wenn du dann einen Pfad übergist, der außerhalb von %MEDIA_ROOT% liegt, dann kommt die entsprechende Fehlermeldung.
gomez72
User
Beiträge: 71
Registriert: Sonntag 28. März 2021, 09:57

sparrow hat geschrieben: Montag 30. Mai 2022, 19:09 Aber default_storage agiert dort, wo deine media files hochgeladen werden. Also in %MEDIA_ROOT%.
Wenn du dann einen Pfad übergist, der außerhalb von %MEDIA_ROOT% liegt, dann kommt die entsprechende Fehlermeldung.
kann ich dem default_storage sagen, dass es wo anders agieren soll ?
gomez72
User
Beiträge: 71
Registriert: Sonntag 28. März 2021, 09:57

ich habe gerade herausgefunden, dass ich mit

Code: Alles auswählen

os.path.isfile(filepath)
ohne Fehlermeldung zu meinem Ziel komme.

Danke der Wink mit dem Zaunpfahl hat gut geholfen.

vg gomez
Antworten