У меня есть демо-сайт трясогузки. Сайт создается с помощью Cookiecutter. Чтобы заполнить CMS исходным контентом, я добавил команду load_initial_data
, которую можно запустить после установки Wagtail. Это заполняет текстовое содержимое из JSON-файла приспособлений и перемещает изображения из папки приспособлений в папку media_root сайта Wagtail. Код выглядит так:
# load_initial_data.py
import os, shutil
from django.conf import settings
from django.core.management.base import BaseCommand
from django.core.management import call_command
class Command(BaseCommand):
def handle(self, **options):
fixtures_dir = os.path.join(settings.PROJECT_DIR, 'fixtures')
fixture_file = os.path.join(fixtures_dir, 'db.json')
image_src_dir = os.path.join(fixtures_dir, 'images')
image_dest_dir = os.path.join(settings.MEDIA_ROOT, 'original_images')
call_command('loaddata', fixture_file, verbosity=0)
if not os.path.isdir(image_dest_dir):
os.makedirs(image_dest_dir)
for filename in os.listdir(image_src_dir):
shutil.copy(os.path.join(image_src_dir, filename), image_dest_dir)
Это работает до тех пор, пока изображения копируются в правильный каталог, а в шаблонах изображения появляются, как и ожидалось, по запросу. Проблема заключается в /admin/images/
, где запрошенная версия изображения недоступна, и поэтому браузер показывает иконку неработающего изображения.
Страница администратора ищет определенный размер изображения ({your-image-name}.max-165x165.{.jpg|.png|.gif}
.
Наблюдение за тем, как изображения перемещаются из original_images
в images
, создает впечатление, что они обрабатываются только после первого запроса шаблона, в котором они находятся. Одной из идей может быть создание шаблона со списком всех изображений (с правильным стилем) для их обработки после загрузки данных. Однако сделать что-то вроде
{% image page.image max-165x165 as test_photo %}
<img src="{{ test_photo.url }}" width="{{ test_photo.width }}" height="{{ test_photo.height }}" alt="{{ test_photo.alt }}" />
По-прежнему возвращает поврежденное изображение и не обрабатывает изображение из папки original_images
в папку images
, как я ожидал. Я попробовал это после начальной загрузки данных и предполагаю, что это потому, что размер изображения должен иметь ссылку как в базе данных, так и в шаблоне?
Есть ли способ программно заставить трясогузку повторно обрабатывать все изображения, чтобы сгенерировать размер и имя файла, которые ищет страница администратора изображения?
(Чтобы быстро упомянуть, если это уместно, изображения в настоящее время находятся в репозитории проекта, но в конечном итоге будут zip-файлом, хранящимся в облачном хранилище, и будут импортированы в проект только после запроса. В настоящее время, независимо от того, хочет ли пользователь их или нет, изображения включены в Cookiecutter)