Александр Горбач


программирование, админство

Изменение названия картинки в django при загрузке в админке

без комментариев

Тоном хорошей разработки пользовательского интерфейса я считаю предупреждение ошибок пользователя, проектирование логики приложения таким образом, что бы пользователь не смог допустить ошибки. Одной из часто распространенных ошибок пользователей админок сайтов является загрузка файлов,имя которых задано кириллицей, что на некоторых шаред-хостингах (да и вообще любой хостинг можно криво настроить ) может привести к невозможности загрузки файла с сервера. Особенно печально это выглядит при публикации статей или новостей в которых используются изображения как часть контента. Для того, чтобы это предотвратить, мы можем автоматически при сохранении изображения переименовывать файл в удобный для нас вид и использовать для верстки страниц уже корректное имя файла, которое со сто-процентной вероятностью будет корректно обрабатываться сервером.

Для реализации функционала нам нужно будет использовать библиотеку для транслитерации кириллицы в латиницу из модуля pytils класс translit. За работу с транслитом отвечает метод slugify.
Пример использования:

translit.slugify(u"вот так щаз напишем")

И так же для решения нашей задачи воспользуемся свойством поля картинки upload_to, которое позволяет нам указать новое имя файла для загружаемой картинки.

В итоге наша модель приоритет вид:

#coding: utf-8

from django.db import models
from pytils import translit

# Picture
class Picture(models.Model):

    def get_image_path(self, filename):
        path = ''.join(["pictures/",translit.slugify(filename)])
        return path

    name = models.CharField(max_length=200, default='NoName')
    detailImage = models.ImageField(upload_to=get_image_path)

Здесь мы не только делаем имена файла безопасными, но и указываем, что загружать файлы мы будем в папку pictures

Автор Sash(k)a

Апрель 8th, 2014 at 9:17 пп

Яндекс.Метрика