Hello world!

Hello world

Django テンプレートで変数代入

Djangoのテンプレートで変数代入に躓いたので

変数代入の方法をまとめておく

 

Djangoのドキュメントによると変数代入を許容していないそうです。

Django の設計思想 — Django 1.4 documentation

 

・カスタムテンプレートタグで回避することができる

テンプレートタグやフィルタを自作する — Django 1.4 documentation

 

・/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])

 

・template内のhtmlで作成したcommon.pyをロードすると

 setタグが使用できるようになる

{% load common %}

{% if xx == aaa %}
    {% set color = '#ffffff' %}
{% else %}
    {% set color = '#c0c0c0' %}
{% endif %}