Столкнулся внезапно сегодня с проблемой и как-то не понимаю, что делать.
def get_doc_dir(self, filename, **kwargs):
import uuid
a = u'%s/docs/%s/%s_%s' % (self.__class__.__name__, self.id, str(uuid.uuid4().hex[2:6]), unicode(filename))
return a
class Offices(models.Model):
inv_template_o_ru = models.FileField(verbose_name=_(u'Шаблон'), upload_to=get_doc_dir, blank=True, null=True)
Спокойно загружаются и сохраняются файлы с русскими буквами, к ним есть доступ из админки.
Но! При попытке работы с урлом внутри(нужно взять шаблон для обработки webodt) получаем ошибку по юникоду. Ладно, бывает... решил сделать транслитерацию для загружаемых файлов - все равно ошибка, пробелы не транслитирует, а они тоже юникод.
Более того, полез в shell для проверки. Получаю
>>>o.inv_template_o_ru
Traceback (most recent call last):
File "<console>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 32-34: ordinal not in range(128)
>>>o.inv_template_o_ru.url '/media/Offices/docs/3/c657_%D0%90%D0%BA%D1%82%20%D0%A0%D0%91.doc'
В чем дело-то? Куда копать, если я таки хочу иметь на сервере файлы с русскими буквами?
Именование файлов таким способом ранее вообще вопросов никаких не вызывал. в шаблонах успешно формируются списки, ссылки на закачку, в админке опять же все красиво видно
DJ1.7, p2.7, ububtu