Django имя файла с кириллицей?

Собственно проблема, не могу загрузить через админку файл содержащий кириллицу в названии, делаю так:

def make_upload_path(instance, filename):
    return u'instructions/%s' % smart_str(filename)

class File(models.Model):
    ...
    file = models.FileField(upload_to=make_upload_path)

    def __unicode__(self):
        return self.name


Так же пробовал smart_unicode

Подскажите, что я делаю не так?

Ошибка 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)


Вот что я получаю в трейсе:

instance <File: у>

filename u'\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f_eng_01_INFO.doc'
  • Вопрос задан
  • 7346 просмотров
Пригласить эксперта
Ответы на вопрос 4
@galaxy
В общем, наверное, самый правильный вариант будет:
1. Оставить
def make_upload_path(instance, filename):
    return u'instructions/%s' % filename


2. Исправить локаль, т.к. в восьмибитной локали сохранить произвольные юникодные имена не выйдет. Кто ставит эту локаль — не знаю, я бы смотрел на скрипты запуска gunicorn'a
Ответ написан
@galaxy
Где-то он ваше юникодное имя в ascii кодирует, скормите ему обычную строку:
def make_upload_path(instance, filename):
    return (u'instructions/%s' % filename).encode('utf-8')
Ответ написан
@KREGI Автор вопроса
Становится интересно, почему то не запускается из конфига /etc/supervisor/conf.d/transactions.conf
/home/user/www/transactions/env/bin/python /home/user/www/transactions/manage.py run_gunicorn --bind=localhost:8000 --log-file /home/user/www/transactions/logs/gunicorn_error.log
а если просто выполнить эту строку то все ок. но там не пойдет, нужно что бы она стартовала сама через supervisor (установлен)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы