Kiedy wszystko zaczyna iść źle, taski szaleją, celery odmawia współpracy i ogółem nadchodzi armagedon, wtedy jest czas na moment refleksji - trzeba przeczyścić kolejkę tasków.
Ostatnio dopadła mnie potrzeba by skopiować obiekt modelu w Django. Zwykłe przepisanie atrybutów do nowej instancji nie wchodziło w rachubę, bo jest ich po prostu zbyt dużo.
{{ MEDIA_URL }}
bądź {{ STATIC_URL }}
i przechodzimy na templatetag {% static 'ścieżka do pliku statycznego' %}
. Łatwiej powiedzieć, niż zrobić - szablonów zatrzęsienie, w każdym jakieś pliki statyczne, a trochę strach przemielić całość za jednym zamachem bez sprawdzenia poprawności.
version6.5
mamy branch o nazwie varsion6.5
. Co robić w takim wypadku (bo nie wygląda to zbyt estetycznie) napiszę w tym poście.
Dziś 256 dzień roku, więc wypada wszystkim programistom złożyć najlepsze życzenia.
value
. Jej przydatność można docenić, kiedy ręcznie budujemy skomplikowany formularz i zachodzi potrzeba użycia składni:
<input type="text" name="{{ form.field.name }}" value="{{ form.field.value }}" />W tym poście pokażę, jak zaimplementować tą metodę w Django wcześniejszym niż 1.3.
stacked inline
lub tabular inline
w adminie.
filter
i exclude
. A zdarzają się takie sytuacje tym częściej, im lepiej znamy framework i im bardziej chcemy go zmusić do jeszcze wydajniejszej pracy.
Jak trudno jest pisać zaciemniony kod w pythonie wie każdy, kto chociaż trochę programował w tym języku. Wymuszanie wcięć, brak klamer otaczających funkcje, pętle i instrukcje warunkowe oraz przejrzysta składnia zachęcają do pisania kodu czystego i łatwego w czytaniu.
Jednak istnieją również w pythonie sposoby na tworzenie kodu bardzo trudnego do późniejszej analizy.
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700' rel='stylesheet' type='text/css' />lub analogicznie dla css
@import url(//fonts.googleapis.com/css?family=Open+Sans:400,300,600,700);
*.html
z dużą ilością tagów typu:
<span style="font-size:small;">Jakiś tekst</span>Jak w łatwy sposób usunąć te tagi html? Przy pomocy regex możemy zbudować takie dwa wyrażenia:
/<\/span>/ /<span.*?>/Pierwszego użyjemy do usunięcia tagu zamykającego, drugiego do tagu otwierającego. Użyjemy wzorca non-greedy (
*?
), który pozwoli nam usunąć tag do pierwszego napotkanego znaku >
.
post_save
. Ku mojemu zdziwieniu, po zapisaniu modelu sygnał post_save
został wysłany poprawnie, natomiast funkcja odbierająca została wykonana dwa razy.
Po bezowocnych poszukiwaniach drugiego miejsca, gdzie mogła być podpięta ponownie, byłem bliski zrezygnowania z użycia sygnału.
Jednak w końcu udało mi się znaleźć rozwiązanie: