21 декабря 2008 г.

Бердяев об эгоцентричности

Бердяев Н.А. Я и мир объектов:

Но "я" имеет свое существование лишь поскольку "я" трансцендирует себя, во внутреннем существовании своем выходит к другому и другим, к "ты", к другому человеку, к Божьему миру. Нет ничего противнее и разрушительнее, чем когда "я" эгоцентрически погружено в себя и свои состояния, забыв о других, о мире, о множественном и целом, т. е. не трансцендирует себя. Это свойство истерических женщин. Только лирический поэт может превратить это уродливое состояние в состояние прекрасное. Но поэтическое творчество есть уже трансцендирование. Основная проблема "я", которая бросает свет на все его существование, есть проблема одиночества, которая так мало исследована философски. Между тем как сама проблема познания может быть рассмотрена в перспективе проблемы одиночества и его преодоления и отсюда может быть добыт внутренний свет.


Что-то в этом есть.

19 декабря 2008 г.

attrs в виджетах django

В процессе написания мультивиджета, пришлось задуматься, а что такое attrs (атрибуты)? По началу было понятно, что это атрибуты поля формы:



Инициализация виджета (class Widget)

def __init__(self, attrs=None):
if attrs is not None:
self.attrs = attrs.copy()
else:
self.attrs = {}

Возьмем для примера следующий виджет:

class Select(Widget):
def __init__(self, attrs=None, choices=()):
super(Select, self).__init__(attrs)

В принципе понятно, что происходит. Далее, рассмотрим функцию рендеринга виджета:

def render(self, name, value, attrs=None, choices=()):
if value is None: value = ''
final_attrs = self.build_attrs(attrs, name=name)
output = [u'' % flatatt(final_attrs)]
options = self.render_options(choices, [value])
if options:
output.append(options)
output.append('')
return mark_safe(u'\n'.join(output))

Что делает функция build_attrs?

def build_attrs(self, extra_attrs=None, **kwargs):
"Helper function for building an attribute dictionary."
attrs = dict(self.attrs, **kwargs)
if extra_attrs:
attrs.update(extra_attrs)
return attrs

Функция принимает **kwargs (keyworded аргументы, то есть аргументы с ключами), в нашем случае передается ключ name с названием данного виджета. В итоге мы получаем примерно следующее:



Но откуда берется id?
Оно приходит в атрибутах до рендеренга виджета, из далеких глубин класса class BoundField(StrAndUnicode), который описан в исходниках как "A Field plus data".
Функция класса as_widget собственно и инициирует вызов рендеринга виджета.

def as_widget(self, widget=None, attrs=None, only_initial=False):
"""
Renders the field by rendering the passed widget, adding any HTML
attributes passed as attrs. If no widget is specified, then the
field's default widget will be used.
"""
if not widget:
widget = self.field.widget
attrs = attrs or {}
auto_id = self.auto_id
if auto_id and 'id' not in attrs and 'id' not in widget.attrs:
attrs['id'] = auto_id
if not self.form.is_bound:
data = self.form.initial.get(self.name, self.field.initial)
if callable(data):
data = data()
else:
data = self.data
if not only_initial:
name = self.html_name
else:
name = self.html_initial_name
return widget.render(name, data, attrs=attrs)

Поэтому, добавить свои атрибуты или получить данные из словаря в процессе переопределения рендеринга не сложно.

class MyWidget(forms.Select):
def render(self, name, value, attrs=None, choices=()):
id_ = attrs.get('id', None)
attrs.update({'onchange':'javascriptfunction(%s%s);' % id_,name})
return super(MyWidget, self).render(name, value, attrs)

Хотя можно передавать атрибуты и в определении самого виджета, функция self.build_attrs() просто обновит словарь новыми записями, но мне надо было именно переопределить атрибуты в виджете, для создания мультивиджета.
attrs.update() в мультивиджетах меняет атрибуты во всех подвиджетах.

18 декабря 2008 г.

Вывести значение поля формы в шаблоне

Вывести значение поля формы в шаблоне, вместо формы поля можно так:
{{ form.initial.field }}

16 декабря 2008 г.

Все проекты Django на Google Code

Ссылка:Все проекты Django на Google Code

Сменив label можно найти и другие полезные open source проекты на Google Code

wysiwyg редактор регулярных выражений

Нашел редактор регулярных выражений:
http://www.ultrapico.com/expresso.htm

Программа бесплатная, но надо заполнить форму, чтобы получить код, чтобы программа работала больше 60 дней.

Как получить traceback в django

Чтобы получить traceback в django, что бывает полезно, когда мы хотим посмотреть request информацию (django выдает куки, POST или GET данные) или сам трейс, в любом месте кода поместим:
assert False
или остановить в самом выражении и вывести его на верх трейса:
assert False, request.POST
assert False, form.cleaned_data['field_name']

Более подробно о дебаге в django (на аглийском).

Куда записывать с ip камеры D-Link DCS-950G?

Озаботился я темой как-то раз, имея камеру, хотелось записывать на внешний источник в интернет, но данное устройство позволяет писать только на NAS или сетевое устройство хранения информации (то есть, сетевую win папку), на ftp писать не может, как я понял (поправьте, если я не прав, я сильно не практиковался).
Так вот, не особо заморачиваясь поисками бесплатного NAS или win share, я все-таки нашел (точнее мне прислали ссылку), куда можно записывать данные:
http://skydrive.live.com/

Бесплатное хранилище объемом 25 ГБ в службе Windows Live
С помощью службы SkyDrive легко хранить и обмениваться файлами и фотографиями практически с любыми пользователем.


Microsoft любит нас =)))))

ps. Буду пробовать, пока нет времени.