7 декабря 2012 г.
archlinux перевод на systemd
Как известно, archlinux к данному моменту почти полностью перешёл на systemd. Старый механизм sysvinit/initscripts тоже почти полноценно пока поддерживается через костыли. Чтобы вату не катать, я тоже стал переходить. В данный момент переход довольно подробно описан на арчвики, но на момент накидывания черновика этой заметки всё только начиналось, к тому же у меня чуть более сложный случай, т.к. стояло несколько специфических сервисов итд. Чтобы сразу всё не сломалось (а оно может даже если ничего не трогать), переходить решил постепенно, в принципе, на арчвики так же рекомендовано сейчас.
Теги:
arch linux,
linux,
systemd
17 ноября 2012 г.
django: пролучить комментарии для объекта
Комментарии в django.contrib.comments, как известно, привязаны к моделям приложений через джанговский contenttypes. В документации рассказано как отрендерить и получить список в шаблонах, но механизм работы более подробно не рассмотрен для того, чтобы работать с комментариями в своих вьюшках. Ничего тут сложного нету, можно получить ContentType и вытащить все комментарии, но есть более удобный метод:
from django.contrib.comments.models import Comment project_comments = Comment.objects.for_model(Project).filter(object_pk=project.id)Его тоже можно разглядеть и изучить в исходниках django. Короче, с помощью for_model у CommentManager можно покороче и поудобнее сделать это всё. Содержимое метода вполне очевидно:
def for_model(self, model):
"""
QuerySet for all comments for a particular model (either an instance or a class).
"""
ct = ContentType.objects.get_for_model(model)
qs = self.get_query_set().filter(content_type=ct)
if isinstance(model, models.Model):
qs = qs.filter(object_pk=force_unicode(model._get_pk_val()))
return qsТакже можно обратить внимание, что если есть возможность, то можно передать не модельку, а конкретный экземпляр, тогда фильтровать по object_pk не придётся.
Теги:
программирование,
django,
python
9 октября 2012 г.
django формы ChoiceField пустой выбор
Как ни странно, на данный момент у ChoiceField нет возможности из формы запросто задать пустой вариант выбора, как, например, у ModelChoiceField. Мелкая обёртка на скорую руку делает это аналогично тому, как это работает в ModelChoiceField.
from django import forms
class EmptyChoiceField(forms.ChoiceField):
def __init__(self, choices=(), empty_label=u"---------", required=True, *args, **kwargs):
# если не required и указана empty_label
if not required and empty_label is not None:
choices = tuple([(u'', empty_label)] + list(choices))
super(EmptyChoiceField, self).__init__(choices=choices, required=required, *args, **kwargs)
14 сентября 2012 г.
eclipse pydev ImportError: Could not import settings
Ещё один косяк после рефакторинга проекта и перевода его на django 1.4. Ни в какую не стартует сервер из manage.py из самого eclipse. Бился-бился, всё равно пишет:
ImportError: Could not import settings 'project-django.settings' (Is it on sys.path?): No module named project-django.settingsИ пути прописывал и всё остальное. Что характерно, извне эклипса, из консоли, всё отлично поднимается. Создал новый проект, запускаю — запускается. Начал разбираться — всё одинаковое в настройках проектов. Ничего не пойму.
django: ImproperlyConfigured Error importing authentication backend
Столкнулся с дурацкой непонятной ошибкой после большого рефакторинга проекта.
ImproperlyConfigured at /
Error importing authentication backend app.auth_backends.CustomUserModelBackend: "No module named app.auth_backends"
Всё дело оказалось в сессиях. В БД в таблице django_session хранятся в том числе и все AUTHENTICATION_BACKENDS сеансов. Чистка таблицы решила проблему.
ImproperlyConfigured at /
Error importing authentication backend app.auth_backends.CustomUserModelBackend: "No module named app.auth_backends"
Всё дело оказалось в сессиях. В БД в таблице django_session хранятся в том числе и все AUTHENTICATION_BACKENDS сеансов. Чистка таблицы решила проблему.
Теги:
django
30 мая 2012 г.
openbox и lxde на arch linux (черновикъ и всякие фишки)
Однажды я ударился головой в сильный минимализм и решил делать очень тонкую систему (на WM openbox, панельке tint2, и всякой другой босоте), потом постепенно пришёл к компромиссу — LXDE, которая тоже использует по умолчанию openbox, плюс свою довольно приличную панельку lxpanel и прочие lx-плюшки, обладающие для меня на данный момент идеальным балансом минимализм-юзабельность. Тут последовательно в виде мелких исторических заметок.
25 мая 2012 г.
Делаем скриншоты в LXDE/openbox кнопкой
В openbox/lxde нет родного способа снять скриншот, а мне этого так не хватало. Имеется способ снятия через утилиту import, входящую в состав imagemagick. Сначала вешаем на обычные кнопкосочетания PrtScr (снять весь экран) и Alt+PrtScr (снять текущее окно) вызовы скриптов. Для этого прописываем в
~/.config/openbox/lxde-rc.xml (для openbox в составе lxde) в секцию <keyboard>:
Теги:
imagemagick,
lxde,
openbox
Подписаться на:
Сообщения (Atom)