Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Имена файлов в Джанго на русском языке. [RSS Feed]

#1 Янв. 22, 2015 13:15:35

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

Имена файлов в Джанго на русском языке.

Ошибка возникает тут: https://github.com/django/django/blob/1.7.3/django/template/loaders/filesystem.py#L38
Питоновский метод open должен корректно обрабатывать юникодовые пути. Почему у вас возникает exception - не понятно.
Приведите таки полный traceback - нажмите на ссылку “Traceback Switch to copy-and-paste view” и скопируйте всю цепочку. Возможно станет понятней что происходит.

Офлайн

#2 Янв. 22, 2015 13:46:33

MiK
Зарегистрирован: 2014-10-30
Сообщения: 191
Репутация: +  -1  -
Профиль   Отправить e-mail  

Имена файлов в Джанго на русском языке.

Пожалуйста.
Если нужно ещё больше - скажите, выложу всю страницу.

Environment:


Request Method: GET
Request URL:

Django Version: 1.7.3
Python Version: 3.4.2
Installed Applications:
('django.contrib.admin',
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’)
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
‘django.middleware.common.CommonMiddleware’,
‘django.middleware.csrf.CsrfViewMiddleware’,
‘django.contrib.auth.middleware.AuthenticationMiddleware’,
‘django.contrib.auth.middleware.SessionAuthenticationMiddleware’,
‘django.contrib.messages.middleware.MessageMiddleware’,
‘django.middleware.clickjacking.XFrameOptionsMiddleware’)


Traceback:
File “/python3/lib/python3.4/site-packages/django/core/handlers/base.py” in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File “/python3/orion/orion/views.py” in карта
13. сырой_шаблон = get_template(u“карта.html”)
File “/python3/lib/python3.4/site-packages/django/template/loader.py” in get_template
144. template, origin = find_template(template_name, dirs)
File “/python3/lib/python3.4/site-packages/django/template/loader.py” in find_template
132. source, display_name = loader(name, dirs)
File “/python3/lib/python3.4/site-packages/django/template/loader.py” in __call__
44. return self.load_template(template_name, template_dirs)
File “/python3/lib/python3.4/site-packages/django/template/loader.py” in load_template
47. source, display_name = self.load_template_source(template_name, template_dirs)
File “/python3/lib/python3.4/site-packages/django/template/loaders/filesystem.py” in load_template_source
38. with open(filepath, ‘rb’) as fp:

Exception Type: UnicodeEncodeError at /
Exception Value: ‘ascii’ codec can't encode characters in position 25-29: ordinal not in range(128)

Отредактировано MiK (Янв. 22, 2015 13:47:09)

Офлайн

#3 Янв. 22, 2015 13:49:08

MiK
Зарегистрирован: 2014-10-30
Сообщения: 191
Репутация: +  -1  -
Профиль   Отправить e-mail  

Имена файлов в Джанго на русском языке.

Сам пока выяснил, что питон, даже из manage.py shell читает файл нормально.
Тестировал операцией:

 with open('/python3/orion/templates/карта.html') as f: print (f.read())

Офлайн

#4 Янв. 23, 2015 00:08:50

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

Имена файлов в Джанго на русском языке.

Похоже это все-таки проблемы с локалью пользователя, от которого запускается проект:

AM-VBox [00:06:57] ~/tmp $ cat test.py
#!/usr/bin/env python3
  
with open('фыв.txt', 'rb') as f:
    print(f.readlines())
AM-VBox [00:07:02] ~/tmp $ echo $LANG
en_US.UTF-8
AM-VBox [00:07:07] ~/tmp $ ./test.py 
[]
AM-VBox [00:07:10] ~/tmp $ LANG=C
AM-VBox [00:07:13] ~/tmp $ ./test.py 
Traceback (most recent call last):
  File "./test.py", line 3, in <module>
    with open('\u0444\u044b\u0432.txt', 'rb') as f:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
AM-VBox [00:07:14] ~/tmp $

Был очень похожий тикет в баг-трекере питона: http://bugs.python.org/issue19846

Отредактировано GreyZmeem (Янв. 23, 2015 00:10:21)

Офлайн

#5 Янв. 23, 2015 10:36:23

MiK
Зарегистрирован: 2014-10-30
Сообщения: 191
Репутация: +  -1  -
Профиль   Отправить e-mail  

Имена файлов в Джанго на русском языке.

GreyZmeem
Насколько я понял, автор темы возмущался, что после использования комманды: “LANG=C” - которую он использует для дебаггинга, возникают проблемы с кодировкой, из за того, что система файлов в ascii, ему ответили, что всем системам уже давно пора перейти на utf-8.

Офлайн

#6 Янв. 23, 2015 17:14:13

MiK
Зарегистрирован: 2014-10-30
Сообщения: 191
Репутация: +  -1  -
Профиль   Отправить e-mail  

Имена файлов в Джанго на русском языке.

Вообщем, починил. Это ошибка Джанго, с корнями от питона: если юникод закодировать в юникод, то получается байт-код, а байт-код слишком маленький, чтобы в него помещались русские символы.
Такая вот фигня.

Офлайн

#7 Янв. 24, 2015 11:32:55

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Имена файлов в Джанго на русском языке.

MiK
юникод закодировать в юникод - я думаю вы как то либо ошиблись либо не правильно выразились. в Python объект Unicode на то и есть что бы в него “все помещалось”.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#8 Янв. 24, 2015 14:44:32

MiK
Зарегистрирован: 2014-10-30
Сообщения: 191
Репутация: +  -1  -
Профиль   Отправить e-mail  

Имена файлов в Джанго на русском языке.

JOHN_16
Я тут не при чём. Так он работает, третий точно, на втором не проверял.

Офлайн

  • Начало
  • » Django
  • » Имена файлов в Джанго на русском языке.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version