Yksinkertaista metaohjelmointia Pythonilla

Huomasin jokunen päivä sitten, että blogikirjoituksiini lisätty siirry blogin pääsivulle -nappi ei toiminutkaan kovin järkevästi. Tein sen käyttömukavuuden lisäämiseksi, mutta en tuolloin ajatellut tätä asiaa aivan loppuun asti. Nimittäin jos joku lukee blogia alkaen vanhoista jutuista, niin tuo paluu-nappi siirtää aina blogin indeksisivun alkuun. Mieleeni tuli siitä syystä se, että napin pitäisi olla kontekstisidonnainen ja palauttaa lukija siihen kohtaan indeksisivua, jossa on linkki blogikirjoitukseen, josta paluu-nappia on painettu.

Havaitsin riemukseni, että minullahan oli jo PostgreSQL 10:n blogs-taulussa id-kenttä, jossa on kunkin blogikirjoituksen SHA1-tiiviste 40 tavua pitkässä ASCII-muodossa. Muokkasin hieman blog.py skriptiä, joka generoi dynaamisesti blogini indeksisivun. Laitoin sinne tietokantahakuun, että uniikki id haetaan ja se laitetaan linkkeihin id-attribuuttiin. Näin "ankkuri" identifioi jokaisen indeksisivulla olevan blogikirjoituslinkin.

Lisäksi tein eräänlaista metaohjelmointia Pythonilla eli mikäli Python-koodin kutsuja välittää blog_entry_id parametrin, niin silloin generoidaan JavaScriptiä, joka asettaa lukijan www-selaimen siihen kohtaan indeksisivua, jossa on linkki blogikirjoitukseen. Mikäli parametria ei ole, niin JavaScriptiä ei generoida ja sivun kohdistus on silloin automaattisesti indeksisivun alussa, ts. uusimman blogikirjoituksen kohdalla.

Suoraan sanottuna en silti tiedä onko tämä ratkaisuni kauhea viritys ja ihan väärä tapa ratkaista kontekstisidonnaisen paluu-napin ongelma. Ainakin tämä ratkaisu oli hyvin minimaalinen ja generoitava JavaScript on yksinkertaista.

Minulla olisi siis sellainen tunne, että näin tämä homma toimii kätevästi ja yksinkertaisesti.

Ai niin, pitihän sitä blog.js JavaScriptiäkin hieman muuttaa. Nyt jokaisessa blogikirjoituksessa on input-formin sisällä piilokenttä, josta välittyy aina kirjoituksen uniikki id. Sitä kautta siis blog.py saa tiedon siitä mihin kohtaan indeksisivua focus pitää asettaa.