Önceki girdimde, Coffeescript mini web çatısı olan Juju ile ilgili bir başlangıç yapmıştık ve örnek bir proje oluşturarak Django'ya ne kadar çok benzediğini göstermiştik. Şimdi, örnek bir uygulama oluşturmak hakkında bilgi vereceğim. Sıfırdan bir proje oluşturarak işe başlayalım:
$ juju startproject hello_juju
$ cd hello_juju
$ ls
apps/ logs/ pids/ settings.coffee static/ urls.coffee
Son komut çıktısıyla proje dizininde hangi dosya ve dizinlerin oluşturulduğunu görüyoruz. Juju'da uygulama oluşturmak için Django'daki gibi startapp parametresini kullanmalıyız. Örnek olarak base adında bir uygulama oluşturalım:
$ juju startapp base
$ ls apps/base/
models.coffee templates/ views.coffee
Django'dan farklı olarak, uygulamalar, apps dizini içinde oluşturulmaktadır. Uygulama ilk oluşturulduğunda, örnek bir view sınıfı ve şablon yer alır. views.coffee dosyasının içeriği şu şekilde:
1 2 3 4 | views = require('juju').views
# Create your views here.
class exports.Index extends views.TemplateView
|
TemplateView sınıfını miras alarak bir Index sınıfı tanımı yapılmış; ama sınıfa dair tek satır bir kod yok! Miras olarak aldığımız TemplateView bizim için gerekli altyapıyı verdiği için, Index sınıfında çok fazla bir şey yazmaya gerek yok; ama örneğin şablon ismini değiştirmek isteseydik, bunu şu şekilde belirtebilirdik:
1 2 3 4 5 6 7 | views = require('juju').views
class exports.Index extends views.TemplateView
constructor: ->
super
@template_name = 'index'
|
Sınıfın adı zaten Index ve öntanımlı template_name değeri de sınıfın küçük harflerle yazılmış hali olduğuna göre, şimdilik buna gerek yok. Şablon dosyaları, her uygulamanın içinde yer alan templates/ dizininde yer alır ve .jade uzantısına sahiptirler. Django, şablon motoru olarak Jinja kullanmasına karşın, ben bu çatıda Jade kullanılmasını istedim. Oldukça pratik ve aktif bir geliştirme sürecine sahip. base/templates/index.jade dosyasını açtığımızda şunları görürüz:
1 2 3 4 5 6 7 8 | html
p
strong Application Name:
#{ juju_appname }
p
strong View Name:
#{ juju_viewname }
|
Sizce de Jade, HTML'i daha okunaklı hale getirmemiş mi? Bence öyle. Şimdi URL tanımını yapıp, sayfanın nasıl göründüğüne bakalım. Proje dizini içinde yer alan urls.coffee dosyasını açın ve # karakterini silin. Şöyle görünmeli:
1 2 3 | exports.urlpatterns = [
{ path: '/', view: 'base.Index' }
]
|
Django'dakiyle benzer yazıma sahip; ama argümanlar konusunda bir iki farklılık sözkonusu. Bunlardan birincisi, view değerleri her zaman <uygulama_adi>.<sinif_adi> biçiminde yazılır; "base.Index". Bir diğeri de name değişkeni her zaman view ile aynıdır, ayrıca name belirtmeye bu yüzden gerek yoktur.
Artık sonucu görebiliriz, proje dizininde juju runserver deyip tarayıcıdan http://localhost:8000 bağlantısına gittiğimizde şunu görürürüz:
index.jade dosyamızda dikkat ettiniz mi bilmiyorum, iki tane değişken vardı: juju_appname ve juju_viewname. Bu iki değişken, benim TemplateView sınıfında öntanımlı olarak tanımladığım değişkenler, eğer bir değişken eklemek isterseniz, bunun için get_context_data fonksiyonunu düzenlemeniz gerekir. Örnek olarak 'hello' değişkeni tanımlamayı deneyelim:
1 2 3 4 5 6 7 8 | views = require('juju').views
class exports.Index extends views.TemplateView
get_context_data: ->
context_data = super
context_data['hello'] = 'World!'
context_data
|
Ve index.jade dosyasını şu şekilde düzenleyelim:
1 2 | html
h1 #{ hello }
|
Geliştirme sunucusunu tekrar çalıştıralım, işte sonuç:
Umarım yöntem olarak Juju hoşunuza gitmiştir. Bu konudaki eleştirileriniz benim için önemli, en kısa zamanda belli eksiklikleri tamamlayıp kurulabilir / denenebilir halini sunmak için sabırsızlanıyorum. İyi günler.