Уведомления

Группа в Telegram: @pythonsu

#1 Май 28, 2012 18:13:42

newca9h
Зарегистрирован: 2012-05-28
Сообщения: 46
Репутация: +  3  -
Профиль   Отправить e-mail  

Вопрос по красоте кода+работа шаблонизатора

Здравствуйте! Пишу свой веб фреймворк(для собственного развития так сказать), хотелось бы узнать как лучше/правильней организовать работу шаблонизатора. Оставляю простой код. Хотел бы узнать правильно ли я пишу(красота кода, удобочитаемость, дальнейшее развитие кода). Суть работы фреймворка сводится к подключению его через 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! Зачем тебе это?”

Отредактировано newca9h (Май 28, 2012 18:15:37)

Офлайн

#2 Май 29, 2012 06:44:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос по красоте кода+работа шаблонизатора

ИМХО, так будет лучше

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 Май 29, 2012 09:59:51

newca9h
Зарегистрирован: 2012-05-28
Сообщения: 46
Репутация: +  3  -
Профиль   Отправить e-mail  

Вопрос по красоте кода+работа шаблонизатора

Благодарю, так действительно лучше! Код гораздо читабельней. Спасибо большое!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version