#!/usr/bin/python # -*- coding: utf-8 -*- import cgitb cgitb.enable() import cgi import urllib # tulostetaan HTTP-protokollan edellyttämä mediatyyppi ja dokumentissa # käytetty merkistö. WWW-palvelin täydentää loput HTTP-otsakkeet # Jos tämä on väärin niin tuloksena on aina server error! print u"""Content-type: text/html; charset=UTF-8\n""" import os from jinja2 import Template, Environment, FileSystemLoader # 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 kansioit pois eli poistaa jinja.cgin # os.path.join liittää os.path.dirnamen palauttaman polun ja 'templates' yhdeksi toimivaksi poluksi tmpl_path = os.path.join(os.path.dirname(os.environ[u'SCRIPT_FILENAME']), u'templates') # alustetaan jinjan kaipaama ympäristö ja asetetaan myös autoescape käyttöön eli jinja automaattisesti # korjaa erikoismerkit html:ään kelpaavaan muotoon env = Environment(autoescape=True, loader=FileSystemLoader(tmpl_path), extensions=[u'jinja2.ext.autoescape']) # ladataan varsinainen template-tiedosto template = env.get_template(u'jinja.html') # u"merkkijono" varmistaa, että käytössä on unicode-merkkijono eikä vahingossa bytestring teksti = u"Hello world! Töimääkö skändit?" lista = [u"aa", u"bb", u"cc", u"dd"] form = cgi.FieldStorage() #muistaa decoodata tai kaatuu erikoismerkkeihin! nimi = form.getfirst(u"nimi", "").decode("UTF-8") # listasta valittu. Muista muuntaa intiksi jotta vertailu templatessa toimii try: valittu = int(form.getfirst(u"lista", "0")) except: valittu = 0 # jo aiemmin syötetyt nimet nimet = form.getlist("nimet") for i in range(0, len(nimet)): nimet[i] = nimet[i].decode("UTF-8") if len(nimi) > 0: nimet.append(nimi) # urlien erikoismerkit on koodattava! haku = u"https://www.google.fi/search?q=" + urllib.quote_plus(nimi.encode("UTF-8")) # tulostettaessa on enkoodattava haluttuun merkistöön # jos merkistöä ei anneta yrittää python käyttää ascii-merkkejä ja tuloksena on skandinaavisten # merkkien takia virhe print template.render(hello=teksti, lista=lista, nimet=nimet, nimi=nimi, valittu=valittu, haku=haku).encode("UTF-8")