Тому, кто хочет организовать фотогалерею на django, могу посоветовать в качестве основного приложения django-imagestore .
Приличный функционал, возможность расширения засчет переопределения моделей альбомов и фотографий, более-менее удобная админка.
Но как всегда не без греха. Как минимум одна проблема в этом модуле есть - а именно проблема каскадного удаления..
Допустим, у вас есть альбом, в нем много фотографий.
Вы из админки удаляете фотографию (не выключаете из альбома, а просто удаляете).
Мелким шрифтом , конечно, показывается предупреждение о том, что будут удалены все сущности. Но кто их читает ?)
Вот и получается - хотели удалить фотку, а удалили весь альбом.
А если на альбом ссылалась еще какая-нибудь сущность, то и она успешно удалится.
На подобное я напарывался в django-lfs.
Чтобы решить эту проблему , необходимо либо пропатчить поле Image.album, добавив в него on_delete=models.SET_NULL.
Либо переопределить Image , как это позволяет делать imagestore и уже аналогично решить эту проблему на уровне своей модели.
воскресенье, 24 февраля 2013 г.
воскресенье, 17 февраля 2013 г.
Слайды: кастомизация интерфейса django-admin
На просторах интернета попалась следующая презентация, которая может задать вектор начинающему джанговоду в направлении того, как можно изменить стандартный интерфейс админки django.
Не могу не поделиться
Не могу не поделиться
вторник, 12 февраля 2013 г.
How to improve Test::Class to conrol test ttl
To make Test::Class control test-suites time-to-live you could inherit Test::Class and redefine runtests method..
For example:
I think, we don't need SIGCHILD here..
source
For example:
package TTL::Test::Class;
use base qw(Test::Class);
use Test::More;
use POSIX ":sys_wait_h";
use constant DEFAULT_TIMEOUT => 60;
# переопределяем метод запуска тестов
sub runtests{
my $t = DEFAULT_TIMEOUT;
my $pid = fork;
my $child_ret_code;
if( $pid > 0 ){ # parent process
#child waiting loop
my $ok_flag = 0;
for(my $i=0; $i < $t; $i++){
if(waitpid($pid, WNOHANG)){
$child_ret_code = $?/256;
ok($child_ret_code);
$ok_flag = 1;
last;
};
sleep(1);
};
if( not $ok_flag ){
diag "Killing test by its timetolive...";
kill TERM =>
$pid;
return $ok_flag;
};
return $child_ret_code;
} elsif( $pid == 0 ) { #child
exit $self->SUPER::runtests;
} elsif ( not defined($pid) ) { #unsuccessfull fork
die "Cannot fork child process: $!";
}
}
1;
I think, we don't need SIGCHILD here..
source
вторник, 5 февраля 2013 г.
django-sitetree: key error 'request'
Сообщение об ошибке при работе с django-sitetree в админке django :
говорит о том , что необходимо добавить
"django.core.context_processors.request", в TEMPLATE_CONTEXT_PROCESSORS
только и всего
говорит о том , что необходимо добавить
KeyError at /admin/sitetree/tree/1/
'request'
Request Method: | GET |
---|---|
Request URL: | http://localhost:8080/admin/sitetree/tree/1/ |
Django Version: | 1.4.3 |
Exception Type: | KeyError |
Exception Value: | 'request' |
"django.core.context_processors.request", в TEMPLATE_CONTEXT_PROCESSORS
только и всего
Подписаться на:
Сообщения (Atom)