Форум сайта python.su
Сделал вот такую модель меню (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 данные отображаються не правильно( то есть вот так: ├ыртэр.
Вопрос: что сделать, чтобы данные нормально отображались?
Отредактировано (Май 7, 2008 20:06:39)
Офлайн
Какая кодировка у базы данных? Какую кодировку вы используете в джанго-проекте?
Офлайн
В Django, я так понял надо смотреть в settings.py? Тут стоит:
DEFAULT_CHARSET = 'utf-8'
[mysql]
default-character-set=utf8
Офлайн
не проще делать сравнение по урлу (текущий - request.path), а не по названию страницы?
а что касается кодировки, в ./manage.py shell что выдает код:
from mysite.index.models import Menu [i.name for i in Menu.objects.all()]
Офлайн
playpauseandstopВот чего выдал:
а что касается кодировки, в ./manage.py shell что выдает код:
[u'\u0453\xab\xa0\u045e\xad\xa0\u043f', u'\u041f\u0440\u043e\u0435\u043a\u0442\u044b']
Офлайн
Вот чего выдал:наберите там же:[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' Проекты
Офлайн
playpauseandstopПосле этого скриптика стало еще лучше)) - ƒ« ¢ ï
наберите там же:
playpauseandstopА это я, извини что не написал, игрался с кодировками в MySQL, типа пересоздавал поля и дописывал CHARSET utf8 и еще что-то, уже не помню) Поэтому так и отобразился первый объект.
второй объект меню отображается как надо, с первым произошли какие-то траблы
Офлайн
zero_modстранно… тогда можно вывод:
После этого скриптика стало еще лучше)) - ƒ« ¢ ï
$ ./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`;
Офлайн
Вобщем показую результаты тех команд, которые написал мне 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
+------------+--------------------------------------------------------------------------------+
Офлайн
Так что никаких идей нет?)
Я вот еще что заметил, когда ввожу данные Меню из джанго-админки, то все нормально проходит, и ошибки не возникает. Но когда ввожу вручную через 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
Офлайн