Форум сайта python.su
3
Здравствуйте! Пишу свой веб фреймворк(для собственного развития так сказать), хотелось бы узнать как лучше/правильней организовать работу шаблонизатора. Оставляю простой код. Хотел бы узнать правильно ли я пишу(красота кода, удобочитаемость, дальнейшее развитие кода). Суть работы фреймворка сводится к подключению его через wsgi, а дальше проверка по словарю урлов и вывод в зависимости от результата, в случае совпадения - вывод шаблона, в случае несовпадения - страницы ошибки(404). Вот код шаблонизатора, который берет из файла settings пути к шаблонам(их может быть несколько папок, там список путей) и выводит их содержимое обрабатывая то, что нужно обработать. Пока подключил родной Template из модуля string для проверки.
Сам код:
from string import Template import settings # опции проекта import global_settings # опции самого фреймворка import os def render(template_name, *args, **kwargs): try: for template in settings.TEMPLATES: temp_name = os.path.join(template, template_name) try: temp = Template(open(temp_name).read()) break # В случае нахождения шаблона в папке выходим из цикла except IOError: temp_name = None # Если temp_name None, то выводим шаблон 404 ошибки if temp_name is None: temp_name = os.path.join(global_settings.TEMPLATES, template_name) temp = Template(open(temp_name).read()) body = temp.substitute(*args, **kwargs) return [body] except IOError as e: return ['NOT FOUND %s' % e]
Отредактировано newca9h (Май 28, 2012 18:15:37)
Офлайн
568
ИМХО, так будет лучше
def render(template_name, *args, **kwargs): temp='' for template in settings.TEMPLATES + global_settings.TEMPLATES: temp_name = os.path.join(template, template_name) if os.path.exists(temp_name): with open(temp_name,'r') as f: temp = Template(f.read()) break if temp: return [temp.substitute(*args, **kwargs)] return ['NOT FOUND %s' % e]
Офлайн
3
Благодарю, так действительно лучше! Код гораздо читабельней. Спасибо большое!
Офлайн