Templates cache in Django

in settings.py

TEMPLATE_LOADERS = (
    ('django.template.loaders.cached.Loader', (
        'django.template.loaders.filesystem.Loader',
        'django.template.loaders.app_directories.Loader',
    )),
)

ref:
https://docs.djangoproject.com/en/dev/ref/templates/api/#django.template.loaders.cached.Loader

template fragment caching
https://docs.djangoproject.com/en/dev/topics/cache/#template-fragment-caching

cache template tag 會 cache 整個 block 的「內容」
第二個參數以後是 cache key 字串

{% load cache %}
{% cache 300 repost-card repost.id LANGUAGE_CODE %}

你可以用多個 context 變數來組合出 key
repost-card 相當於是 prefix 字串

How to set a variable in Django template?

How to set a variable in Django template?

Creating a custom template tag for assigning variables in Django template.

in app/templatetags/common.py

from django import template
register = template.Library()

class SetVarNode(template.Node):

    def __init__(self, var_name, var_value):
        self.var_name = var_name
        self.var_value = var_value

    def render(self, context):
        try:
            value = template.Variable(self.var_value).resolve(context)
        except template.VariableDoesNotExist:
            value = ""
        context[self.var_name] = value

        return u""

@register.tag(name='set')
def set_var(parser, token):
    """
    {% set some_var = '123' %}
    """
    parts = token.split_contents()
    if len(parts) < 4:
        raise template.TemplateSyntaxError("'set' tag must be of the form: {% set <var_name> = <var_value> %}")

    return SetVarNode(parts[1], parts[3])

in app/templates/xxx.html

{% load common %}

{% if work and is_public_work %}
    {% ifequal link_class 'info_box pull-right' %}
        {% set ga_label = 'card' %}
    {% else %}
        {% set ga_label = ga_label_detail %}
    {% endifequal %}
    <a class="{{ ga_label }}">123</a>
{% endif %}

ref:
http://www.yihaomen.com/article/python/341.htm
http://www.soyoucode.com/2011/set-variable-django-template