template.py (1073B)
1 ''' 2 ' pnbp - pnbp is not a blogging platform 3 ' template.py 4 ' Paul Longtine <paul@nanner.co> 5 ''' 6 7 import re, json, yaml 8 from helper.functions import * 9 10 # Adds in variables defined in pages.json 11 # 12 # t = raw template, var = "pagevar" variables in pages.json (<pagename> -> "pagevar") 13 def generate(t,var,page): 14 if page == "index": 15 page = "" 16 17 t = t.replace("%page%",page) 18 t = run(t,page) 19 20 for search,replace in var.items(): 21 if search[0] == ":": 22 try: 23 t.index("%"+search+"%") 24 exists = True 25 26 except: 27 exists = False 28 29 if exists: 30 inc = file(replace).read() 31 inc = generate(inc,var,page) 32 print("Building include: '"+search+"'") 33 t = t.replace("%"+search+"%",inc) 34 35 else: 36 t = t.replace("%"+search+"%",replace) 37 38 return t 39 40 #Takes all code blocks in templates ("{:print("Hi"):}") and executes it, and replaces the block with the "returns" variable 41 def run(template,page): 42 for script in re.findall("{:(.*?):}",template, re.DOTALL): 43 returns = "" 44 exec(script) 45 template = template.replace("{:"+script+":}",returns) 46 47 return template