Django - рендерит список имен файлов в шаблон - PullRequest
1 голос
/ 29 ноября 2011

Я создаю шаблон для страницы галереи изображений.Мой подход заключается в следующем:

  • Размещение изображений из подкаталога папки с изображениями
    • Папка с изображениями будет называться так же, как заголовок галереи
  • Представление передает список имен файлов шаблону
  • Шаблон проходит по списку и создает теги img

Так что мое представление будет

def some_gallery(request):
    #LOGIC TO GET A LIST OF FILENAMES

    variables = RequestContext(request,{
        'user' : request.user,
        'title' : 'something',
        'files' : fileList
    })
    return render_to_response('gallery_template.html',variables)

И шаблон

....
{% for file in files %}
    <img src="/path/to/images/{{ title }}/{{ file }}">
{% endfor %}
....

Проблема, с которой я сталкиваюсь, заключается в том, что Django выдает ошибку 500, когда я пытаюсь использовать функцию os.listdir.Как я могу получить список файлов, которые мне нужны ??

Проблемная версия представления, которое дает ошибку 500

def some_gallery(request):

    variables = RequestContext(request,{
        'user' : request.user,
        'title' : 'something',
        'files' : os.listdir('/path/to/gallery')
    })
    return render_to_response('gallery_template.html',variables)

Также я должен отметить, что путь к файлу работает, поэтомуесли я иду прямо к URL, я получаю только изображение, как и ожидалось.

РЕДАКТИРОВАТЬ: Исправлены опечатки в примерах кода

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Я разобрался.Мои методы были правильными, поэтому любой, кто хочет делать подобные вещи, должен работать с примерами кода.

Проблема, с которой я столкнулся, заключалась в том, что Django вызывал вызов функции listdir из-за некоторых проблем с доступом к файлупуть, который был предоставлен.Я убедился, что права доступа к каталогу и путь к нему верны, и он работал.

Спасибо тем, кто помог.

2 голосов
/ 29 ноября 2011

Ваш словарь не является допустимым кодом Python, потому что вы используете "=" вместо ":".Это должно быть:

variables = RequestContext(request,{
    'user' : request.user,
    'title' : 'something',
    'files' : os.listdir('/path/to/gallery')
})

И последнее: listdir ожидает краткий путь, вы можете получить корневой путь вашего проекта с помощью:

ROOT_PATH = os.path.abspath(os.path.dirname(__file__).decode('utf-8')).replace('\\', '/') 
...