... на своих джанговских проектах, пожалуйста! Он практически готов к внедрению в основной код, нужно только потестировать его на реальных вещах, где есть не только английский язык. Собственно, он практически безглючный, например сейчас softwaremaniacs.org работает именно на нем (вчера переключил).

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

Смысл всей идеи в том, что теперь внутри проекта на Django везде нужно работать с юникодом, а не с простыми строками. Это позволяет не думать о кодировках вообще. Превращение же юникода в кодировку БД и веб-страниц (туда и обратно) Django делает автоматом.

От пользователя по большей части требуется сделать одну вещь: в моделях заменить __str__ на __unicode__. Иногда просто заменить, иногда внутри чуть-чуть переделать:

Было Стало
Если просто выводится атрибут
class MyModel(Model):
  # ...

  def __str__(self):
    return self.title
class MyModel(Model):
  # ...

  def __unicode__(self):
    return self.title
Если делается строковое форматирование:
class MyModel(Model):
  # ...

  def __str__(self):
    return 'Объект %s' % self.title
class MyModel(Model):
  # ...

  def __unicode__(self):
    return u'Объект %s' % self.title
Если вызывается отображение родительского объект
class MyModel(Model):
  # ...

  def __str__(self):
    return str(self.parent)
class MyModel(Model):
  # ...

  def __unicode__(self):
    return unicode(self.parent)

Более подробно написано в wiki: http://code.djangoproject.com/wiki/UnicodeBranch#PortingApplicationsTheQuickChecklist

Само же переключение делается так:

svn switch http://code.djangoproject.com/svn/django/branches/unicode/

Есть надежда, что бранч включат в основной код уже на следующей неделе.

Комментарии: 14

  1. wiz

    Ну вот, теперь мы имеем ещё один __метод__ который непонятно когда вызывается, а когда нет.

  2. Sergey

    2 wiz

    вообще-то это старый непонятный метод на новый меняется. никакой революции

    2 иван

    попробую сегодня вечером переключить свой проект

  3. Kirill Mavreshko

    Неужели это свершилось?! Наконец-то!

    Нынешний бардак давно пора было прекращать. Я пробовал использовать юникод ещё с середины прошлого года, так постоянно что-нибудь приключалось - то фильтр не работает как надо, то админка оказывается выполнять какую-нибудь простейшую операцию, то шаблон не собирался, то ORM с ума сходил... Благо, быстро фиксили, обычно svn up сразу решал проблему, а за последние два месяца я вообще уже ни на что не нарывался, но то, что проблему признали, и собираются решать - это очень, очень радует!

    Ещё раз огромное спасибо, за освещение таких важных событий!

  4. Иван Сагалаев

    Ну вот, теперь мы имеем ещё один __метод__ который непонятно когда вызывается, а когда нет.

    Почему непонятно? Это стандартный питоновский метод, полностью аналогичный __str__, только вызывается тогда, когда надо привести объект к юникодной строке, а не к байтовой.

    По-хорошему, __str__ вообще должен умереть, чем быстрее, тем лучше :-).

  5. Давид Мзареулян

    По-хорошему, str вообще должен умереть, чем быстрее, тем лучше :-).

    Ещё бы u'..' умирло — вообще было бы здорово. Не знаете, это вообще планируется?

  6. Иван Сагалаев

    Планируется в Питон 3.0. Там будет все правильно: все строки — юникод, а "много байтов подряд" — отдельный тип bytes.

  7. bobuk

    Да, отлично работает.

  8. crash

    Что-то SlugField сломался, не наполняется сам даже если писать чистые ascii

  9. crash

    Ой, простите, мой страшный косяк :)

  10. hidded

    Упал вывод ошибок в форме при form.as_p (остальной вывод форм в порядке), вылечилось сие в убийством force_uncode django/newforms/forms.py:126. Баг или фича?

  11. Иван Сагалаев

    Мнэ-э-э... А вариант того, что этот баг не в Django, не рассматривается? :-)

    Если серьезно, то понять что-то по "упал вывод ошибок" нельзя, напишите в мой джаноговский форум (http://softwaremaniacs.org/forum/viewforum.php?id=5) traceback, который выдается, поглядим, что там не так.

  12. Константин

    Вроде все работает

  13. [...] sendmail, приучал проект от неюникодной Django к юникодной и листал мануалы по svn. Мозги слегка перегружены, но [...]

  14. Kirill Mavreshko

    Свершилось! Юникодный бранч теперь в основной ветке:

    The branch was merged into trunk on July 4, 2007 in [5609].

    С чем всех и поздравляю!

Добавить комментарий