пятница, 23 июля 2010 г.

Python datetime to javascript Date

В Django есть DjangoJSONEncoder, который используется при конвертировании данных в json-формат. Он форматирует дату в строку. Пришлось написать свой енкодер, что бы на клиенте получать обьект Date, а не строку.

Copy Source | Copy HTML
  1. from django.utils import simplejson
  2.  
  3. class DatetimeJSONEncoder(simplejson.JSONEncoder):
  4.  
  5.     class DateInt(int):
  6.         '''
            Наследуемся от int, потому что тогда значение будет без "".
            В других случаях получим: "new Date(100500)" и при eval будет просто
            строка.
            '''
  7.         def __str__(self):
  8.             return 'new Date(%s)' % (self*1000)
  9.  
  10.     def default(self, o):
  11.         from django.utils import datetime_safe
  12.         from datetime import datetime
  13.         import time
  14.  
  15.         if isinstance(o, datetime):
  16.             d = datetime_safe.new_datetime(o)
  17.             return self.DateInt(int(time.mktime(d.timetuple())))
  18.         else:
  19.             return super(DatetimeJSONEncoder, self).default(o)
  20.  
  21. #example
  22. from datetime import datetime
  23. from django.utils import simplejson
  24.  
  25. data = dict(date=datetime.now())
  26. json = simplejson.dumps(data, cls=DjangoJSONEncoder)

среда, 21 июля 2010 г.

Ковертируем текст из файла в utf8

Понадобилось читать из файлов субтитры, парсить и складывать в БД. Как всегда проблемы с кодировкой. Гугл подсказал вот такой вот модуль: сhardet.
Copy Source | Copy HTML
  1. import chardet
  2.  
  3. text = subtitles.read()
  4. text = unicode(text, chardet.detect(text)['encoding'])
  5.  

вторник, 20 июля 2010 г.

Подгрузка связанных моделей, ч.2

Собственно пылятся еще две функции, неизвестной полезности, для подгрузки связаных моделей: для GenericForeignKey и ForeignKey(null=True). Работало на Django 1.1. Думаю с небольшим "допилом" будет и на 1.2 работать. Все это делалось для комментариев. Первой ф-цией подгружали комментируемые обьекты, а второй - пользователей, которые комментировали.

четверг, 29 апреля 2010 г.

Ошибки валидации для ExtJs

Добавляем небольшую функцию для отображения ошибок в формах ExtJs. Названия полей Django-форма и ExtJs-должны совпадать, ну или переформатировать словарь ошибок. Такой же прием использовал и для jQuery.ajaxForm, только ошибки "врукопашную" отображал.

пятница, 26 марта 2010 г.

Устанавливаем значение в context навсегда

Собственно что натолкнуло
Самого удивило что значение установленное из Node в context сохраняется в пределах одного блока.

{% extends 'test/base.html' %}

{% load foo %}

{% block content %}
{% set_bar_value %}
{{ bar_value }} == 'BAR'
{% endblock %}

{% block menu %}
{{ bar_value }} == ''
{% endblock %}

пятница, 28 августа 2009 г.

Без права редактирования

Опять же постил на djbook.ru.
Есть модель комментариев. Нужен интерфейс в админке для их модерирования. Модератор может только удалять комментарии, во избежания казусов "я такого не писал". Нужно убрать права на изменение записи и убрать все ссылки на страницу редактирования комментария.

Подгрузка связанных моделей (многие-ко-многим)

Постил когда-то на djbook.ru решил и сюда добавить.
Select_related не работает для обратных связей. В мануале Django, в примере, используется обычный менеджер для обратных связаных таблиц, который посылает запрос при обращении к ним. Можно, конечно, использовать raw sql, когда нет доступа к методам моделей, например, get_absolute_url и др. Функция load_related_m2m для обьектов в object_list получает все связаные(m2m) через поле field обьекты и заносит в поле "all_" % field обьекта. В результате получаем всего один лишний запрос на каждую связаную таблицу.

Вот здесь Анатолий Ларин запостил версию для Django 1.2.