Listowanie zawartości katalogu

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:

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

w settings.py:

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ę:

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?

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?

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
0

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

@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:

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1