Найти - Пользователи
Полная версия: Вопрос по красоте кода+работа шаблонизатора
Начало » Python для новичков » Вопрос по красоте кода+работа шаблонизатора
1
newca9h
Здравствуйте! Пишу свой веб фреймворк(для собственного развития так сказать), хотелось бы узнать как лучше/правильней организовать работу шаблонизатора. Оставляю простой код. Хотел бы узнать правильно ли я пишу(красота кода, удобочитаемость, дальнейшее развитие кода). Суть работы фреймворка сводится к подключению его через 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]

Мне важно знать, можно ли упростить/улучшить код. Просто есть сильное стремление разобраться как в самом Python, так и в веб технологиях в целом.

Пожалуйста не пишите фразы типа: “Есть же Django! Зачем тебе это?”
FishHook
ИМХО, так будет лучше
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]
newca9h
Благодарю, так действительно лучше! Код гораздо читабельней. Спасибо большое!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB