Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 28, 2009 14:27:22

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой в темплейте.

есть список page

page[1]='\xc4\xe2\xe0 \xf1\xee\xee\xe1\xf0\xe0\xe6\xe5\xed\xe8\xff'
передаю в темплейт весь список и в самом темплейте пишу
{{page.1}}
и вижу чистую страницу. ни корявки, ни ошибки а именно чистую страницу.
как с этим бороться?

при этом если передать в темплейт не page а page все прекрасно работает, но этот вариант никак не подходит.

PS: база в utf-8, запросы пишу на raw sql, базу заполнял через стандартную админку.



Отредактировано (Сен. 28, 2009 14:33:56)

Офлайн

#2 Сен. 28, 2009 15:58:03

Vermus
От:
Зарегистрирован: 2008-11-18
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой в темплейте.

Наверное надо написать в темлейете так:

{%for p in page%}
{{p}}
{%endfor%}



Офлайн

#3 Сен. 28, 2009 16:02:19

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой в темплейте.

не в этом дело. так, кстати, тоже пустую страницу показывает.
в системе темплейтов существует какое-то ограничение, описание которого я не могу найти.

нашел тег который предназначен для дебага - pprint с ним показывает исходные коды, но это тоже хреново.
скорее всего нужен тег который будет переводить из исходной кодировки в читаемую. но я его найти не могу.



Офлайн

#4 Сен. 28, 2009 21:11:44

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

проблема с кодировкой в темплейте.

Лечить по фотографии тут никто не умеет. Так что, пока вы не покажите код, результата будет мало.



Офлайн

#5 Сен. 29, 2009 14:32:21

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой в темплейте.

def get_all_published_pages(request):
raw_list=q("a", "SELECT * FROM pages_page WHERE draft=false")
if raw_list:
# Если раскоментить нижестоящее то все работает ОК.
# page_list=[]
#for raw in raw_list:
# Если раскоментить нижестоящее и передавать page_list то все работает ОК.
# page=[]
# page=list(raw)
# page[1]=unicode(page[1], "cp1251")
# page[3]=unicode(page[3], "cp1251")
# page_list.append(page)

return render_to_response("all_pages.html",{"page_list":raw_list})
else:
raise Http404()
ОС - debian
browser - firefox
стандартная локаль - utf-8
кодировка БД - utf8_general_ci

заполняю данные через стандартную админку.



Отредактировано (Сен. 29, 2009 15:05:11)

Офлайн

#6 Сен. 29, 2009 19:59:30

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой в темплейте.

Кажется разобрался.



All of Django’s database backends automatically convert Unicode strings into the appropriate encoding for talking to the database. They also automatically convert strings retrieved from the database into Python Unicode strings. You don’t even need to tell Django what encoding your database uses: that is handled transparently.

Если это не есть причина - прошу попровать.



Офлайн

#7 Сен. 29, 2009 20:34:56

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

проблема с кодировкой в темплейте.

pochechyev
У вас какая цель? Найти где джанга что-то делает или свой плохой код исправить? Так займитесь делом.

Вы нас изначально обманули - ‘\xc4\xe2\xe0 \xf1\xee\xee\xe1\xf0\xe0\xe6\xe5\xed\xe8\xff’ это не utf8. Это cp1251. Отсюда и все проблемы.

Кстати, для таких простых запросов практиченее ORM использовать.



Офлайн

#8 Окт. 2, 2009 17:36:22

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой в темплейте.

я и сам обманывался.
по каким-то причинам при сохранении в базу джанговская админка кодирует все данные в cp1251. соответственно когда я их вытаскиваю нужно декодировать их обратно.

а задача понять как это работает и исправить исходя из этих знаний исправить код.

использую чистый sql чтобы “научится”



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version