Кеширование предварительно обработанных шаблонов с помощью GAE Memcache API

1

Я использую эту логику для рендеринга templates в приложении GAE:

path = os.path.join(os.path.dirname(__file__), 'page.html')
self.response.out.write(template.render(path, template_values))

Мне интересно, можно ли (и более эффективно) загружать текст незагруженного шаблона и хранить его в Memcache. Кажется, что метод template.render() нужен путь к файлу, так что это возможно?

Изменить: для ясности я говорю о кешировании самого шаблона, а не о рендеринге вывода.

Теги:
google-app-engine

1 ответ

3
Лучший ответ

Google App Engine кэширует шаблоны из коробки, чтобы ваше приложение реагировало.

Вот интересная часть модуля template.py, доступного в исходном коде:

def render(template_path, template_dict, debug=False):
  """Renders the template at the given path with the given dict of values."""
  t = load(template_path, debug)
  return t.render(Context(template_dict))

template_cache = {}
def load(path, debug=False):
  abspath = os.path.abspath(path)

  if not debug:
    template = template_cache.get(abspath, None) # <---- CACHING!
  else:
    template = None

  if not template:
    directory, file_name = os.path.split(abspath)
    ...

Как вы можете видеть, единственное, о чем нужно помнить, - это не устанавливать debug = True в Production.

  • 2
    Обратите внимание, что это кэширует шаблоны в локальной памяти экземпляра, а не в memcache, что является гораздо лучшей идеей.
  • 0
    Но можно ли управлять автоматическим кэшированием в памяти экземпляра? Что если вы хотите показать одну и ту же страницу в течение целого часа?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню