2-8-2010, 1:33 ö.ö. //
//
python
, django
, markdown, pygments
// 1686
Bir süredir blog sayfam için yazı girmemi kolaylaştıracak bazı düzenlemeler yapıyorum. Öncelikle Beginning Python: From Novice to Professional kitabındaki "instant markup" örneğini uygulamaya çalıştım, düz yazı yazacaksanız gayet kullanışlı, fakat eğer kod yayınlayacaksanız sapıtıyor. Daha sonrdan BBCode tarzı birşeyler oluşturmayı denedim, fakat o sırada Markdown'ı keşfettim.
Markdown is a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML).
Python modülünü http://pypi.python.org/pypi/Markdown/2.0.3 adresinden indirebilirsiniz.
Henüz isteğim doğrultusunda nasıl geliştirebileceğimi bulamasam da ilk haliyle bile çok yardımcı oluyor. Django'yla kullanmak için iki farklı yol izleyebilirsiniz. Birincisi, hangi modelinizde uygulamak istiyorsanız, onun save metodunu override edersiniz. Örneğin modelimdeki "post" alanına uygulamak istiyorsam, markdown modülünü import ettikten sonra şöyle yapıyorum:
def save(self, *args, **kargs):
self.post = markdown.markdown(self.post)
super(Post, self).save()
Bu yöntemin kötü yanı, eğer o yazıyı bir daha düzenlemek isterseniz, size markdown'ın eklediği html taglarıyla beraber gelecek. Yani yazıyı bir kere eklediniz mi, düzenlemek için yine html ile uğraşmanız gerekir. Kötü bir yöntem yani.
İkinci yöntem de, markdown fonksiyonu için bir template tag'ı oluşturup, istediğiniz yere uygulamanız. Bu yöntem her yönden çok daha mantıklı gözüküyor, hem istediğiniz şeye uygulayabilirsiniz. Bunun için markdown'u proje klasörüne kopyaladıktan sonra ayar dosyanızdan markdown'u ISTALLED_APPS altında eklemeniz gerekiyor. Daha sonra şu belgedeki adımları izlemelisiniz. Ya da:
- markdown klasörünün altında templatetags klasörü oluşturursunuz.
-
markdown.py diye bir dosya açarsınız. İçine şu kodu yapıştırırsınız:
from django import template
from ..markdown import markdown as Markdown
from django.template.defaultfilters import stringfilter
register = template.Library()
@register.filter # detayli bilgi icin http://docs.djangoproject.com/en/dev/howto/custom-template-tags/
@stringfilter # sadece stringlerle calissin
def markdown(value):
"String'i Markdown'dan gecirir."
return Markdown(value)
-
Daha sonra template tagımızı kullanmak istediğimiz templateimize {% load markdown %} satırını ekleyip, hangi string'de kullanmak istiyorsak ona markdown filter'ını uygularsınız. Örneğin {{ post|markdown|safe|escape }}.
Daha sonra http://daringfireball.net/projects/markdown/syntax adresindeki gibi yazarsınız. Eklenti desteği sayesinden markdown'a tablo bile çizdirebilirsiniz(eklenti klasörüne bakın).
25-7-2010, 9:18 ö.s. //
//
python
, django
// 1522
Kendime Python'da öğreneceklerim veya öğrenmem gerekenlerle alakalı bir liste oluşturdum ve Django ile aklımdaki birkaç şeyi daha uygulamaya sokar sokmaz bunlarla ilgileneceğim:
- map, reduce, filter, iter, xrange fonksiyonlarını kullanmayı öğrenmek. Aslında hepsini bir ara öğrenmiştim fakat neredeyse bir kere bile kullanmadım ve unuttum tabii ki.
- Decorator ve metaclass. Gözümü korkutan iki konu. Kitaplarda genelde ileri seviye olduklarından ve bir müddet öğrenilmese de olur olduğundan(yok böyle cümle) bahsedilir.
- itertools.
- Ve tabii ki OOP. Bildiğimi zannediyorum ama uygulamaya gelince kalıyorum açıkçası. Ne zaman bir sınıf yazsam sanki sözlüklerle çok daha kolay bir şekilde yapabilecekmişim gibi geliyor.
5-7-2010, 5:55 ö.s. //
//
python
// 1458
Blogumda kullanmak için basit bir fonksiyon yazmıştım. Şu anda sağda gördüğünüz gibi, FriendFeed'den yazdığınız mesajlarınızı çekiyor. Fakat sadece kendi feedinize yazdıklarınızı.
import urllib2, datetime
def FriendFeed():
try:
friendfeed = urllib2.urlopen("http://friendfeed-api.com/v2/feed/hesap_adiniz").read()
except:
friendfeed = open("/home/kullanici/Desktop/friendfeed.txt").read()
#url, date, body, id, from
true = True
entries = eval(friendfeed)["entries"][:5]
for entry in entries:
entrydate = entry["date"]
#format 2010-06-01T06:09:14Z
entrydate = entrydate.split("T")
tarih = entrydate[0].split("-")
saat = entrydate[1][:-1].split(":")
entryDate = datetime.datetime(int(tarih[0]), int(tarih[1]), int(tarih[2]),
int(saat[0]), int(saat[1]), int(saat[2]))
entries[entries.index(entry)]["date"] = (datetime.datetime.now()-entryDate).days
return entries
- satırın olayı şu, localhost'dan ara sıra offline olarak çalıştığımdan, bir kere kendi feedimi kaydettim ve internet bağlantım yoksa o dosyadan alıyordum, o kısmı kaldırabilirsiniz.
5-7-2010, 10:43 ö.ö. //
//
python
, django
, wordpress
// 1727
Bir süredir Django öğreniyorum ve öğrendiklerimi uygulamaya koyma amacıyla basit bir blog şeysi yazmıştım. Daha sonra bir tasarım uydurdum ona ve bundan sonra buraya yazmaya devam edeceğim. Wordpress kadar rahat olmasa da, en azından bana Python kullanarak istediğim gibi geliştirme ve kendimi geliştirme imkanı sağlıyor.
Biraz altyapıdan bahsetmek gerekirse, Python 2.4 ve Django kullandım. Yönetim için Django'nun kendi admin eklentisini, yorumlar için yine Django'nun kendi yorum eklentisini kullandım. Programlama açısından geriye kalanları kendim programladım. Başlangıç için The Definitive Guide to Django(Apress) kitabından faydalandım, birkaç bölümden sonra Django'nun kendi belgelerinden yararlandım.
Tasarım kısmına gelince, o kadar çok yerden o kadar çok şey çaldım ki, ben bile hatırlayamıyorum. Aslında genel olarak altyapıyı ben yaptım fakat daha sonra geriye kalan detayları civardan çaldım. Aklıma geldiği kadarıyla kaynak belirteceğim:
Daha çok geliştirilmesi gerekiyor tabii ki, şimdilik aklıma gelenler, etiket bulutu, yazının içeriğine göre otomatik etiketleme, etiketlere göre alakalı yazıları bulabilme, yazı eklemek için daha gelişmiş bir editor(örneğin linkleri tanıyıp gerekli html kodlarını ekleyebilen).. Aslında bunların hiçbiri zor şeyler değil fakat Django bilgim henüz yeterli değil, Python kısmı kolay..
Yazı eklemeyi daha kolay hale getirebilmek için öncelikle yönetici panelinden girdiğim bir yazının veritabanına eklenmeden önce nasıl bir fonksiyona sokulabilir, çıktının veritabanına yazılabileceğini öğrenmem lazım. Yapabilirsem resim ve dosya ekleme özelliği de eklemek istiyorum. İşin arkaplanında düzenlenecek bir sürü kod var aslında, templatelerimin düzenlenmeye ihtiyacı var, view fonksiyonlarımda da pek çok kod tekrarı vs. var. Bir değişiklik yapmam gerektiğimde zorlanacağım.
Onun dışında, gördüğünüz hataları yorumlar kısmında belirtirseniz çok iyi olur..
Son olarak Python destekli sunucusunu kullanmama izin veren arkadaşım Muhammet'e teşekkürler..
0 ,
1 ,
2 ,
3 ,
4 ,
5 ,
6 ,
7 ,
8 ,
9 ,
10 ,
11 ,
12