Двойная (каскадная) шаблонизация в Django

20
Двойная шаблонизация в Django

Transcript of Двойная (каскадная) шаблонизация в Django

Двойная шаблонизация

в Django

или

Кеширование с помощью шаблонов в

Django

или даже

Многоуровневое кеширование с посредством каскадной

шаблонизациив Django

или

Как применить в хозяйстве:

{% templatetag openvariable %}и

{% templatetag closevariable %}а еще

{% templatetag openblock %}и

{% templatetag closeblock %}

на всякий случай:

{% templatetag openblock %} → {%{% templatetag closeblock %} → %}{% templatetag openvariable %} → {{{% templatetag closevariable %} → }}

3090 ms →11 запросов

← 1024 ms← 770 ms

django-debug-toolbar

почти не меняются

крайне редкоможет быть меняются

но всем пофиг

раз в год, если повезёт

меняются иногда

from django.template.loader import render_to_stringimport os

def view4report(request): # простые, легкие и быстрые вычисления и запросы data_light = 2*2 # | Dim = {"DATA_LIGHT": data_light} # <--------+ if not os.path.isfile("C:/path_to_project/templates/LightTemplate.html"): # сложные, тяжелые и медленные вычисления и запросы data_hard = 3.1416926**3**4 # | Dim.update({"DATA_HARD": data_hard}) # <------+ Result = render_to_string("HardTemplate.html", Dim) file = open("C:/path_to_project/templates/LightTemplate.html", 'w') file.write(Result.encode('utf-8')) file.close() response = render(request, "LightTemplate.html", Dim) return response

<p>Часто обновляемые и «лёгкие» данные:<br/> {% templatetag openvariable %} DATA_LIGHT {% templatetag closevariable %}</p>

<p>Редко обновляемые и «тяжёлые» данные:<br/> {{ DATA_HARD }}</p>

<p>Часто обновляемые и «лёгкие» данные:<br/> {{ DATA_LIGHT }}</p>

<p>Редко обновляемые и «тяжёлые» данные:<br/> 1.8631971713448156e+40</p>

LightTemplate.html

HardTemplate.html

525 ms →4 запроса

django-debug-toolbar

Повторим:{% templatetag openblock %} → {%{% templatetag closeblock %} → %}{% templatetag openvariable %} → {{{% templatetag closevariable %} → }}

И помним про:вложенные шаблоны

Сергей Ерёминоknardia.ruerjemin @gmail.comfacebook.com/erjemin