» »

Python templating

Python templating

PrimozBo ::

Kater template engine priporočate za python ? Trenutno preizkušam Cheetah pa se mi zdi še kar.

Pa ne dojamem fore teh template enginov ko pravjo da ločujejo logiko od oblike. Meni se ne zdi ravno da bi blo tko. V Cheetahu recimo pišeš for zanke in podbne zadeve med html in to se mi ne zdi ravno ločevanje logike od oblike.
Česa ne dojamem ?

moowy123 ::

Ne dojameš koncepta mvc.

jeti51 ::

Poglej si recimo Jinja2.

PrimozBo ::

moowy123 je izjavil:

Ne dojameš koncepta mvc.


Se mi zdi da ga dojamem in prav zato me zanima kako za vraga za recimo Cheetah pomaga pri tem konceptu, če pa še vedno mešam html kodo z neki čudnimi kontrolnimi stavki.

Sem pogledal Jinja2 in je na prvi, drugi in tretji pogled čudna 8-O, verjetno rabiš nekaj časa d se poglobiš vanjo.

moowy123 ::

Razlika je v tem da so ti for oz. ostali kontrolni stavki v pogledu ( view ) namenjeni izključno predstavitvi oz. izgledu podatkov, ki si jih pridobil v kontrolerju. V pogledu tako ne greš v bazo ali pa recimo shranjevati sprememb v bazo. Se pa posvetiš temu kako naj bi stvari izgledala na ekranu in to tudi sprogramiraš preko template-ov in podatkovnimi strukturami ( recimo list ) ki jih zgradiš v kontrolerju in jih posreduješ pogledu.

PrimozBo ::

Zaenkrat delam z mod pythonom ki je sicer bl osnovn sam mal za učit je ql.
In zdej če prov zastopim je stvar taka:
- model je moja baza
- controler je koda, ki bere/piše v bazo in premleva podatke
- view je pa html + cheetah in tukaj je vse kar naredim da grem po seznamu nekih podatkov, ki sem jih že prej pripravil.

DavidJ ::

Controller
- ujame http zahtevek,
- ga validira,
- iz njega izlušči parametre ter z njimi
- pokliče storitveno plast (model).

Model
- je do klicatelja agnostičnen (mu je vseeno, ali kliče spletna stran, spletna storitev ali kaj tretjega),
- lahko dostopa do baze, obstoječega informacijskega sistema ali česa tretjega in
- vrne rezultat controllerju.
(Treba je pa vedit, da model ni baza, ampak je koda, ki izvrši poslovno logiko (Lahko, da gre zgolj za branje in pisanje iz baze, ampak navadno vsebuje še kaj več.))

Controller nato (lahko rezultat preoblikuje in nastavi parametre) pošlje vse kupaj view-ju, ki iz podanih parametrov sestavi HTML stran (ali pdf, xls, ali kaj tretjega), ki se posreduje odjemalcu.

View naj ne bi vseboval programske kode, ker naj bi z njimi znali delat tudi manj tehnično podkovani ljudje -- oblikvalci. Zankam in vejitvam se res ne da izognit, a imajo nekateri (spodobni) programski jeziki kostrukte, ki jih učinkovito zamenjajo. Primer bi bil JSTL v Javi. V Pythonu ne vem kako je, PHP ne podpira takih posebnih struktur in je potrebno znotraj ogleda kdaj tudi poklicat navadno PHP kodo.

Torej, zahtevek prestreže controller, ta pokliče model, za predstavitev pa controller posreduje rezultat viewju.
"Do, or do not. There is no 'try'. "
- Yoda ('The Empire Strikes Back')

Zgodovina sprememb…

  • spremenil: DavidJ ()

PrimozBo ::

Torej funkcije mod pythona k se kličejo ob prejetju zahevka so moj controler. Ko od tu pokličem funkcije, ki iz baze naberejo podatke so te funkcije moj model. View je pa koda template in tisti klic iz controlerja, ki ta template naloži in ga izvede.

Gandalfar ::

daj vzami potem cel MVC framework: django, turbogears, pylons . web.py ce je treba. Ne svojega razvijat :)

PrimozBo ::

Sedaj mam že kup kode napisane za mod python pa ne grem zdej tega prestavljat nekam drugam. Samo prikaz bi rad ločil ker sedaj html sestavljam v raznih for zankah z združevanjem nizov.
Od začetka je blo čist elegantno ker so bli košči majhni in preprosti, sedaj pa ratuje zmešnjava.

Takole se je začelo :D
def getNovice( stNovic=10 ):
    rssList = rssNovice( RSS_URL )
    htmlElement = '<a href="%s">%s</a> <br />'
    html = HTML %"\n\t\t".join( htmlElement %elmTuple for elmTuple in rssList[:stNovic] )
    print html

HTML = """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
            <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
	    <title>Novice</title>
            <link href="oblika.css" rel="stylesheet" type="text/css" />
	</head>
	<body>
            %s
	</body>
</html>
"""

Gandalfar ::

a rss generator bos tudi svoj napisal?

PrimozBo ::

Gandalfar je izjavil:

a rss generator bos tudi svoj napisal?


Ne razumem, Zakaj ?

Gandalfar ::

ker imas gor tam nek generator RSS-ja za svoj web-page ali pa RSS-ja/atoma sploh ne bos imel?

PrimozBo ::

Ne, tm sparsam en rss in ga prikažem kot htl stran. Oz pozeneje bo to samo delček strani, sedaj samo za test vstavim v nek html ogrodje.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

AJAX kratke naloge

Oddelek: Izdelava spletišč
192143 (1610) Yacked2
»

Pomoč pri izdelavi Python skripte (strani: 1 2 )

Oddelek: Programiranje
615402 (4048) BigWhale
»

Preprosta PHP aplikacija

Oddelek: Izdelava spletišč
334382 (3786) Jerry000
»

PHP ASP

Oddelek: Izdelava spletišč
352840 (2165) MrBrdo
»

PHP - objektno programiranje

Oddelek: Izdelava spletišč
344092 (3480) Trubadur

Več podobnih tem