* РБК — новости

* *

Блог разработчиков Yawd - оптимизированные для SEO имена изображений с помощью sorl-thumbnail и Django

При работе с Django я склонен использовать sorl-миниатюр все больше и больше. Это быстрый и простой способ создания миниатюр изображений для вашего приложения. Фактически, я использую его почти на каждом теге img в своих шаблонах, чтобы гарантировать, что загружаемые пользователем изображения будут соответствовать разметке страницы. Но URL-адреса, которые генерирует приложение, имеют вид http://media.example.com/cache/9f/0c/9f0c98435b16bcea2b9ead87.jpg. За исключением того, что они не очень привлекательны, такие URL-адреса являются SEO-убийцами.

От Правила публикации изображений в Google Я подчеркиваю следующее:

  • "Имя файла может дать Google подсказки о предмете изображения. Попробуйте сделать свое имя файла хорошим описанием предмета изображения. Например, my-new-black-kitten.jpg намного более информативен, чем IMG00023 .JPG. Описательные имена файлов также могут быть полезны для пользователей: если мы не сможем найти подходящий текст на странице, на которой мы нашли изображение, мы будем использовать имя файла в качестве фрагмента изображения в наших результатах поиска. "
  • «Рассмотрите возможность структурирования каталогов так, чтобы похожие изображения сохранялись вместе. Например, у вас может быть один каталог для миниатюр и другой для полноразмерных изображений; или вы можете создать отдельные каталоги для каждой категории изображений (например, вы можете создать отдельные каталоги для Гавайев, Ганы и Ирландии в вашем каталоге путешествий). "

Хорошим способом реализован sorl-thumbnail, предоставляющий полезную документацию по использованию приложения. Как указано в документации, вы можете использовать THUMBNAIL_PREFIX, чтобы выбрать папку, отличную от кеша /, для хранения миниатюры. Это изменит папку миниатюр с http://media.example.com/cache/9f/0c/9f0c98435.jpg на http://media.example.com/images/9f/0c/9f0c98435.jpg. Это лучше, но имена файлов, не поддерживающие SEO, все еще там. Наконец, я заметил настройку THUMBNAIL_BACKEND, которая позволяет нам переопределить способ генерации имен файлов по умолчанию. После прочтения исходного кода sorl-thumbnail я придумал следующий простой класс:

import os, re from sorl.thumbnail.base import ThumbnailBackend из django.template.defaultfilters import slugify из класса параметров импорта django.conf Класс импорта SEOThumbnailBackend (ThumbnailBackend): "" "Пользовательский бэкэнд для имен файлов / URL-адресов, удобных для SEO." "" def _get_thumbnail_filename (self, source, geometry_string, options): "" "Вычисляет имя файла назначения." "" split_path = re .sub (r '^% s% s?'% (source .storage .path (''), os .sep), '', source .name) .split (os .sep) split_path .insert (- 1, geometry_string) # попытка убрать имя файла, чтобы сделать его удобным для SEO split_name = split_path [- 1] .split ( '.') try: split_path [- 1] = '% s. % s '% (slugify ('. '. join (split_name [: - 1])), split_name [- 1]), за исключением: #on не удается сохранить исходное имя файла pass path = os .sep .join (split_path) #if путь уже начинается с THUMBNAIL_PREFIX. Не объединяйте PREFIX. Таким образом, мы избегаем использования URL-адреса, например /images/images/120x120/my.png, если не путь .startswith (settings .THUMBNAIL_PREFIX): вернуть '% s% s' % (settings .THUMBNAIL_PREFIX, path) путь возврата

Метод _get_thumbnail_filename () выполняет вычисление относительного пути к файлу и вставляет целевые измерения в целевое имя пути. Например, скажем, мы хотим создать миниатюру 120x120 для файла '/ home / django / project / media / polls / Question for the Big приз.jpg' . Основываясь на корневом пути хранилища, мы рассчитываем относительный путь (например, «опросы / вопрос для большого выигрыша. Jpg»), вставляем измерения в путь - чтобы убедиться, что мы генерируем конкретные пути для разных измерений (например, «polls / 120x120 /»). Вопрос к Большому призу.jpg '), слагайте имя файла, чтобы сделать его более удобным для SEO (например,' polls / 120x120 / question-for-the-big-приз.jpg ') и, наконец, добавьте THUMBNAIL_PREFIX. Возвращаемый путь должен быть «images / polls / 120x120 / question-for-the-big-pri.jpg».

Примечание: использование slugify требует, чтобы вы не загружали изображения с почти одинаковыми именами файлов (например, «image 1 1.jpg» и «image 1-1.jpg», потому что вы в конечном итоге будете использовать один и тот же эскиз для обоих файлов! Если вы действительно Если у вас есть такие изображения (в любом случае, это не рекомендуется), вы можете просто удалить часть слуги из приведенного выше кода.

Наконец, мы должны включить sorl-thumbnail, чтобы использовать наш бэкэнд:

THUMBNAIL_BACKEND = 'my_app.my_module.SEOThumbnailBackend' THUMBNAIL_PREFIX = 'images /'R '^% s% s?

Реклама

Популярные новости


Реклама

Календарь новостей

Реклама

Архив новостей

Реклама