Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » В MySQL отбражаються то каракули, то знаки вопросов. [RSS Feed]

#1 Май 7, 2008 20:04:39

zero_mod
От:
Зарегистрирован: 2007-09-07
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

В MySQL отбражаються то каракули, то знаки вопросов.

Сделал вот такую модель меню (models.py):

from django.db import models

class Menu(models.Model):
name = models.CharField(max_length=15)
url = models.CharField(max_length=40)

def __unicode__(self):
return self.name

class Admin:
list_display = ('name', ‘url’)

В views.py:

# -*- coding:utf-8 -*-

from django.http import HttpResponse
from django.template import Context, loader
from mysite.index.models import Menu

def main(request):
page = ‘Главная’
menu = Menu.objects.all()
t = loader.get_template('index.html')
c = Context({'menu': menu, ‘page’: page,})

return HttpResponse(t.render©)

Ну и соответсвенно шаблон (index.html):
<ul>
{% for i in menu %}
{% ifequal page i.name %}
<li id=“current”><a href=“{{ i.url }}”><span>{{ i.name }}</span></a></li> #подсвечиваем для текущей страницы
{% else %}
<li><a href=“{{ i.url }}”><span>{{ i.name }}</span></a></li>
{% endifequal %}
{% endfor %}
</ul>
Меню нормально выводит, но вот в шаблоне я сравниваю переменную page и i.name, и по сути на странице ссылка должна подсветиться, но увы она в обычном состоянии. Посмотрел таблицу через MySQL client данные отображаються не правильно( то есть вот так: &#9500;ыртэр.
Вопрос: что сделать, чтобы данные нормально отображались?



Отредактировано (Май 7, 2008 20:06:39)

Офлайн

#2 Май 7, 2008 21:23:49

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

В MySQL отбражаються то каракули, то знаки вопросов.

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



Офлайн

#3 Май 7, 2008 22:51:49

zero_mod
От:
Зарегистрирован: 2007-09-07
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

В MySQL отбражаються то каракули, то знаки вопросов.

В Django, я так понял надо смотреть в settings.py? Тут стоит:

DEFAULT_CHARSET = 'utf-8'
В MySQL, в файле “my.ini” стоит:
[mysql]
default-character-set=utf8



Офлайн

#4 Май 8, 2008 15:04:07

playpauseandstop
От:
Зарегистрирован: 2007-10-31
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

В MySQL отбражаються то каракули, то знаки вопросов.

не проще делать сравнение по урлу (текущий - request.path), а не по названию страницы?

а что касается кодировки, в ./manage.py shell что выдает код:

from mysite.index.models import Menu
[i.name for i in Menu.objects.all()]



Офлайн

#5 Май 8, 2008 18:57:58

zero_mod
От:
Зарегистрирован: 2007-09-07
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

В MySQL отбражаються то каракули, то знаки вопросов.

playpauseandstop
а что касается кодировки, в ./manage.py shell что выдает код:
Вот чего выдал:
[u'\u0453\xab\xa0\u045e\xad\xa0\u043f', u'\u041f\u0440\u043e\u0435\u043a\u0442\u044b']



Офлайн

#6 Май 8, 2008 19:50:49

playpauseandstop
От:
Зарегистрирован: 2007-10-31
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

В MySQL отбражаються то каракули, то знаки вопросов.

Вот чего выдал:
[u'\u0453\xab\xa0\u045e\xad\xa0\u043f', u'\u041f\u0440\u043e\u0435\u043a\u0442\u044b']
наберите там же:
# -*- coding: utf-8 -*-
from mysite.index.models import Menu
item = Menu.objects.all()[0]
item.name = u'Главная'
item.save()
второй объект меню отображается как надо, с первым произошли какие-то траблы
In [1]: print u'\u0453\xab\xa0\u045e\xad\xa0\u043f'
ѓ« ў­ п
In [2]: print u'\u041f\u0440\u043e\u0435\u043a\u0442\u044b'
Проекты



Офлайн

#7 Май 8, 2008 21:00:58

zero_mod
От:
Зарегистрирован: 2007-09-07
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

В MySQL отбражаються то каракули, то знаки вопросов.

playpauseandstop
наберите там же:
После этого скриптика стало еще лучше)) - &#131;« &#162;­ &#239;

playpauseandstop
второй объект меню отображается как надо, с первым произошли какие-то траблы
А это я, извини что не написал, игрался с кодировками в MySQL, типа пересоздавал поля и дописывал CHARSET utf8 и еще что-то, уже не помню) Поэтому так и отобразился первый объект.



Офлайн

#8 Май 8, 2008 21:24:30

playpauseandstop
От:
Зарегистрирован: 2007-10-31
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

В MySQL отбражаються то каракули, то знаки вопросов.

zero_mod
После этого скриптика стало еще лучше)) - &#402;« &#162; &#239;
странно… тогда можно вывод:
$ ./manage.py dbshell
mysql> SHOW VARIABLES WHERE `Variable_name` LIKE '%character%' OR `Variable_name` LIKE '%collation%';
mysql> SHOW CREATE DATABASE `DATABASE_NAME`;
mysql> SHOW CREATE TABLE `TABLE_NAME`;
где DATABASE_NAME - имя вашей базы данных, TABLE NAME - имя таблицы для модели Menu в базе данных…

я думаю всем все сразу станет ясно )))



Офлайн

#9 Май 9, 2008 15:02:21

zero_mod
От:
Зарегистрирован: 2007-09-07
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

В MySQL отбражаються то каракули, то знаки вопросов.

Вобщем показую результаты тех команд, которые написал мне playpauseandstop:

SHOW VARIABLES WHERE `Variable_name` LIKE '%character%' OR `Variable_name` LIKE '%collation%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8
| character_set_connection | utf8
| character_set_database | utf8
| character_set_filesystem | binary
| character_set_results | utf8
| character_set_server | utf8
| character_set_system | utf8
| character_sets_dir | F:\Program Files\MySQL\MySQL Server 5.0\share\charsets\
| collation_connection | utf8_general_ci
| collation_database | utf8_unicode_ci
| collation_server | utf8_unicode_ci
+--------------------------+---------------------------------------------------------+
SHOW CREATE DATABASE mysitedb;
+----------+-------------------------------------------------------------------------------------------+
| Database | Create Database
+----------+-------------------------------------------------------------------------------------------+
| mysitedb | CREATE DATABASE `mysitedb` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */ |
+----------+-------------------------------------------------------------------------------------------+
SHOW CREATE TABLE index_menu;
+------------+--------------------------------------------------------------------------------+
| Table | Create Table
+------------+--------------------------------------------------------------------------------+
| index_menu | CREATE TABLE `index_menu` (`id` int(11) NOT NULL auto_increment,

`name` varchar(15) collate utf8_unicode_ci NOT NULL,
`url` varchar(40) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

+------------+--------------------------------------------------------------------------------+



Офлайн

#10 Май 11, 2008 13:25:02

zero_mod
От:
Зарегистрирован: 2007-09-07
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

В MySQL отбражаються то каракули, то знаки вопросов.

Так что никаких идей нет?)
Я вот еще что заметил, когда ввожу данные Меню из джанго-админки, то все нормально проходит, и ошибки не возникает. Но когда ввожу вручную через mysql client:

mysql> INSERT INTO index_menu
-> VALUES ('1', 'Главная', 'http://127.0.0.1:8000/');
Появляется ошибка:
ERROR 1406 (22001): Data too long for column 'name' at row 1
Странно..



Офлайн

  • Начало
  • » Django
  • » В MySQL отбражаються то каракули, то знаки вопросов.[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version