Django-filer: чтение структуры папок в шаблоне для создания галереи
Я только начал использовать Django-Filer, и я немного растерялся относительно того, как я могу на самом деле ссылаться на изображения, загруженные в систему администратора.
Мне нужно отобразить простую динамическую галерею на одной странице, которая может обрабатывать несколько альбомов. Каждый альбом - это новый заголовок на странице, и все изображения в этом альбоме отображаются под этим заголовком. Примерная структура, которую я надеюсь использовать в системе администрирования Django-Filer:
- корень
- Галерея
- Альбом 1
- Изображение 1
- Изображение 2
- Изображение 3
- Альбом 2
- Альбом 1
- Другая Галерея
- Галерея
Поэтому мой вопрос заключается в том, чтобы с помощью цикла в шаблоне как отображать каждое изображение, используя папку "Альбом" в качестве нового заголовка?
Второй связанный с этим вопрос: как бы я расширил модель папки, включив в нее поле описания, не нарушая ее функциональности?
1 ответ
Это то, что я сделал, может быть, это поможет с некоторыми корректировками (ваш первый вопрос).
Сначала я создаю папки в filer (там могут быть подпапки).
После этого я добавляю новую FoldersModel для каждой папки в галерее. Вам нужно будет добавить папки "Галерея изображений" и "Другая галерея".
models.py
from filer.fields.folder import FilerFolderField
class FoldersModel(models.Model):
folder = FilerFolderField()
views.py
from django.shortcuts import render
from models import FoldersModel
def show(request):
all_folders = FoldersModel.objects.all()
return render(request, 'main.html', {'all_folders': all_folders})
main.html
{% load thumbnail %}
{% for f in all_folders %}
<div class="title">{{ f.folder }}</div>
{% for img in f.folder.files %}
<!-- show files from folder -->
<img src='{% thumbnail img 200x200 crop=scale %}'/>
{% endfor %}
{% for subfolder in f.folder.get_children %}
<!-- getting all subfolders -->
<div class="title">{{ subfolder }}</div>
{% for img in subfolder.files %}
<!-- show files from subfolder -->
<img src='{% thumbnail img 200x200 crop=scale %}'/>
{% endfor %}
{% endfor %}
{% endfor %}
Я не уверен, что это лучший способ сделать это, но у меня работает.
Редактировать:
Я думаю, что лучше использовать это: https://django-filebrowser.readthedocs.io/en/latest/filelisting.html