#!/usr/bin/python # -*- coding: utf-8 -*- import cgi import cgitb cgitb.enable() import os from jinja2 import Template, Environment, FileSystemLoader import json import urllib #ensin content-type print """Content-type: text/html; charset=UTF-8\n""" try: # antaa polun alikansiossa olevaan jinja.html-tiedostoon: # ei tarvitse huolehtia siitä onko polku riippuvainen palvelimenasetuksista # os.environ['SCRIPT_FILENAME'] palauttaa polun suoritettavaan ohjelmaan (jinja.cgi) # on syytä huomata, että tämä polku ei ole sama kuin tiedostopolku halava/jalava-palvelimissa # os.path.dirname tipauttaa polusta muut kuin kansiot pois eli poistaa cgi-ohjelman lopusta # os.path.join liittää os.path.dirnamen palauttaman polun ja 'templates' yhdeksi toimivaksi poluksi # jos tätä haluaa kokeilla komentoriviltä niin tuloksena on keyerror. SCRIPT_FILENAME-ympäristömuuttuja löytyy # vain www-palvelimen CGI-ympäristöstä eikä normaalista shellistä tmpl_path = os.path.join(os.path.dirname(os.environ['SCRIPT_FILENAME']), 'templates') except: # jos tänne päädytään www-palvelimessa niin koko sovellus kaatuu... tmpl_path = "templates" # alustetaan Jinja sopivilla asetuksilla env = Environment(autoescape=True, loader=FileSystemLoader(tmpl_path), extensions=['jinja2.ext.autoescape']) # ladataan oma template template = env.get_template('jinja.html') automerkit = { "1": {"nimi": "Tesla", "lkm": 0}, "2": {"nimi": "Lada", "lkm": 0}, "3": {"nimi":"Mini", "lkm":0} } form = cgi.FieldStorage() lkm = form.getfirst(u"lkm", u"1").decode("UTF-8") laskuri = form.getfirst(u"laskuri", "").decode("UTF-8") automerkki = form.getfirst(u"automerkki", u"1").decode("UTF-8") try: lkm = int(lkm) except: lkm = 0 try: automerkit = json.loads(laskuri) except: pass try: automerkit[automerkki]["lkm"] += lkm except KeyError: pass #laskuri = laskuri + lkm json_jinja = json.dumps(automerkit) for i in automerkit: # luodaan dict jossa on tarvittavat arvo:avain-parit eli samat avaimet kuin lomakkeen kenttien nimet # ja arvoina samat tiedot mitä lomakkeelle tulee param = { "lkm": 1, "laskuri": json_jinja, "automerkki": i } # urlencode tekee oikeanlaisen querystringin ja myös koodaa kaiken tarpeellisen oikein url = urllib.urlencode(param) # tallennetaan url automerkit-rakenteeseen automerkit[i]["url"] = url # Renderoidaan Jinjan template jossa laskuri- ja lkm-muuttujat viedään jinjalle samannimisinä # muuttujina print template.render(laskuri=laskuri, lkm=lkm, automerkit=automerkit, automerkki=automerkki, json=json_jinja).encode("UTF-8")