Listowanie zawartości katalogu

Listowanie zawartości katalogu
R6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Witam

od 2h walczę z wyświetleniem katalogu w Django - nieskutecznie.

mam katalogi oparte na schemacie, np: /media/client_ups%ciąg_znakow%/
a w nich głównie pliki JPG.

Chcę uzyskać do nich dostęp z poziomu http://<url>/media/client_ups/%ciąg_znakow% i mieć wylistowaną całą zawartość katalogu.

w urls.py mam dorzucone na końcu pliku:

Kopiuj
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

w settings.py:

Kopiuj
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Jednak cały czas otrzymuję:

Kopiuj
Page not found (404)
Request Method: 	GET
Request URL: 	http://127.0.0.1:8000/media/
Raised by: 	django.views.static.serve

Directory indexes are not allowed here.

A konsola zwraca "not found".
Ścieżka jest ok, bo nie wywala błędu jak przy dodaniu w url np. "/media/media".
Plik b.jpg, który jest w katalogu /media/ przy wrzuceniu ścieżki, też chce pobierać.
Co robię źle?

P2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Nie mam za bardzo teraz czasu myśleć o co dokładnie w tym problemie chodzi, ale jest biblioteki pillow do zdjęć w django. Może by je tak załadować do bazy i wyświetlać rekordy (zdjęcia) z bazy?

IK
  • Rejestracja: dni
  • Ostatnio: dni
0

Pozwalanie userom na wylistowanie całej zawartości katalogu z mediami to słaby pomysł, ale jeśli jesteś pewny, że chcesz to zrobić, to dwie najprostsze wg mnie opcje to:

  1. ustaw serwer (nginx, apache) tak, żeby serwował folder z mediami zamiast oddelegowywać to do Django
  2. napisz widok, który będzie obsługiwał requesty idące do MEDIA_URL/... i jeśli adres jest folderem, to wylistuj jego zawartość (np. używając os.listdir), w przeciwnym wypadku - pokaż plik
R6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Jednak trochę kreatywności i dałem radę:
views.py:

Kopiuj
@csrf_exempt
def listfiles(request, folder):
    files = os.listdir('%s\media\client_ups\%s' % (base_dir, folder))
    return render(request, 'files.html', {'files' : files, 'folder' : folder})

urls.py:

Kopiuj
urlpatterns = [
    url(r'^index/$', index),
    url(r'^listfiles/(?P<folder>\w+)/$', listfiles)
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Działa.

@iksde, @Pes2009 - dziękuje za zainteresowanie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.