szarak@jabster.pl


Własny filrt w szablonie Django

Wpis na 1. poziomie, wysłany 01 kwietnia 2008 o 01:02:10

W szablonach Django dostępny jest spory zestaw filtrów. Używa się ich prosto:

{{ obiekt|filrt }} {{ obiekt|filtr:"parametr" }}

Dostępne filtry pokrywają większość popularnych sytuacji, ale może czasem przydać się zrobienie jakiegoś własnego.



Wejdź do katalogu swojej aplikacji w której chcesz używać filtru. Stwórz katalog templatetags, a w nim pliki init.py i twoja_nazwa.py.

 
mkdir templatetags
touch templatetags/__init__.py
touch templatetags/TWOJANAZWA.py
 

w pliku TWOJANAZWA.py:

 
from django import template
register = template.Library()
 
@register.filter("nazwa_naszego_filtra")
def nazwa_naszego_filtra(value):
    #tutaj jakies operacje.
    return cośtam
 

Jak pisałem wcześniej, filtr może przyjmować parametr:

 
def nazwa_naszego_filtra(value, argument):
    #tutaj jakies operacje.
    return value + argument
 

Przed użyciem naszego filtra w szablonie ładujemy go za pomocą:
{% load nazwa_filtra %}

i używamy:

{{ obiekt|filtr:"argument" }}


Mam nadzieję, że zbytnio nie namieszałem ;)

Dodaj komentarz | *nix django Internet Progamowanie Różne Techblog |

Vim / Gvim i kopiowanie

Wpis na 0. poziomie, wysłany 23 marca 2008 o 22:30:13

Z notatnika użytkownika vim’a… ;)

Kopiowanie do vima jest proste. Jeśli pracujemy w terminalu kopiujemy tak, jakbyśmy wklejali polecenie itp. Środkowy przycisk myszki, albo shift+insert. Warto zapamiętać, że gdy np. edytujemy kod i vim robi automatycznie wcięcia, po wklejeniu dostaniemy kod z wcięciami do wcięć – czyli papke nieczytelnego spaghetti. Pozbyć się problemu możemy uprzednio wpisując:
:set paste
Teraz wszystko powinno się ładnie wkleić.

Ale co z kopiowaniem i wklejaniem w drugą stronę? Skopiować z vim nie jest trudno. Gdy pracujemy w terminalu po prostu zaznaczamy tekst i już mamy go w schowku. Gorzej z Gvim. Samo zaznaczanie nie wystarcza.

Postępujemy następująco: Po wybraniu tekstu w trybie wizualnym (za pomocą v i kursory, shift+v i kursory, bądź zaznaczenie myszką wprowadzamy:
"+y
co skopiuje zaznaczenie do schowka systemowego. Finito.

Ot niby głupie, proste i dawno powinienem to znać, ale jakoś mnie ta wiedza ominęła (czyt. ja ominąłem spory kawał podręcznika).

3 komentarze | *nix Progamowanie Różne Techblog |

Python z matplotlib jako narzędzie naukowe – czyli po co utrudniać sobie życie?

Wpis na 1. poziomie, wysłany 22 listopada 2007 o 14:38:25

Jeśli nie interesuje Cie tło sprawy, pomiń następne dwa akapity :)
Stanąłem przed następującym faktem: muszę napisać program zajmujący się prostymi obliczeniami statystycznymi. Wyznaczanie trendów itp. itd. Musze to zrobić „na wczoraj” :)


Problemy: nie wiedziałem, że w ogóle będę się zajmował taką tematyką. Przedmiot na którym to piszę, miał być czymś zupełnie innym – miał skupiać się na programowaniu obiektowym, zarządzaniem projektem i planowaniem. Jak się okazało, w trakcie semestru zmienił mi się prowadzący, na panią, która o programowaniu pojęcie ma średnie. Owszem, teorii trochę, ale nie interesują jej bebechy naszych aplikacji, możemy sobie pisać w czym chcemy i jak chcemy. Skupić się trzeba jednak na rozwiązaniu problemu statystycznego (wcześniej każdy pisał co innego – od gier po aplikacje użytkowe, symulatory…). Olałem w ogóle sprawę ale wreszcie trzeba było do tego siąść. Trzeba było działać szybko, więc wymyśliłem sobie, że zamiast bawić się w c++ i qt (z czego to pierwsze jest jak dla mnie ok, to drugie mniej), to zrobie aplikacje w czymś całkiem nowym, może łatwiejszym.


Wybór padł na język Python. Dlaczego? Bo denerwują mnie aplikacje w nim pisane (jakoś zasobożerne mi się wydają, może trochę ociężałe), ale jednak z jakiegoś powodu sporo ludzi ciągle w tym pisze. Czyli w skrócie ciekawość.


Co się okazuje? W parę godzin nauczyłem się tyle, że byłem w stanie napisać program parsujący plik xml i wyświetlający dane w postaci wykresu z interfejsem w gtk+ – z czego połowe tego czasu spędziłem na szukaniu beznadziejnie głupiego błedu, o czym później.


Co do języka: jest dość prosty przy pierwszym kontakcie. Pisze się szybko, łatwo a co najważniejsze przyjemnie. Obiektowością przesiąknięty całkowicie, a korzysta się z niej wręcz intuicyjnie. Trochę inna składnia niż mi znana, ale łatwa do przyswojenia. Wcięcia w kodzie zamiast klamer … uh, z tym ciężko, ale prawdę mówiąc teraz na mnie wymusza to czystość w kodzie i już nie narzekam. A do tego łatwo dostępna pomoc/podręczniki, np. Dive into Python.


Zachęca również spora ilość bibliotek, które prawdopodobnie pokryją 70% zadań, które przed Tobą czekają. Do parsowania xml wybrałem minidom. Z jego pomocą i tutorialem zczytanie pliku zajęło chwilkę i zajmuje mniej niż 15 linii kodu. Interfejs graficzny stworzyłem za pomocą pygtk. Jego obsługa jest ładnie opisana w tutorialach, jak znasz obsługe sygnałów z jakiegoś innego języka/biblioteki to załapiesz w mig. No to teraz przyszedł czas na wizualizację wyników, gdzie z pomocą przyszła biblioteka matplotlib.


Matplotlib w Pythonie obsługiwany jest przez moduł „pylab.py”. Narysowanie prostego wykresu sprowadza się np. do:
from pylab import *
plot([1,2,3,4,5,4,3,2,1])
show()

Co oznacza załadowanie modułu pylab (i wczytanie dostępnych funkcji do standardowej przestrzeni nazw – tak sobie to wytłumaczyłem, przekładając to na rozumowanie z c++. Można jeszcze „zainkludować” moduł poprzez import pylab, ale wtedy z dostępnych funkcji trzeba korzystać poprzez pylab.show() itp.. Pythonowców z góry przepraszam za niefachowość i nieścisłość. Wszystkiego uczyłem się na wariata, by jak najszybciej pokazać wynik pracy, a nie poprawnie zrozumieć język ;p). Druga linia kreśli wykres. Wygląd domyślny, oś x domyślna (kolejne liczby naturalne), wartości na osi y podane są w nawiasie w postaci tablicy – oznacza się ją przez nawiasy kwadratowe. Show() wyświetli nam wykres na ekranie w postaci okna gtk z układem współrzędnych dostosowanym do danych, możliwością powiększania i przesuwania wykresu, historią zmian widoku, a nawet zapisem do pliku. Wszystko w 3 liniach. Szczegółów nie piszę, wszystko jest ładnie opisane na stronie matplotliba, którą podałem. Po polsku 3 słowa na ten temat znajdziecie np.tutaj.

Nie powiem, pierwszy kontakt z pythonem i matplotlibem bardzo pozytywny. Pani prowadząca cieszyła się, że widzi ładny wykres, ja się cieszyłem, bo poświęciłem temu minimalną ilość czasu i poznałem coś nowego. Mam nadzieje, że moja przyjaźn z tym językiem szybko nie zniknie.

2 komentarze | *nix gnome Progamowanie Różne |