Django テンプレートで変数代入
Djangoのテンプレートで変数代入に躓いたので
変数代入の方法をまとめておく
・Djangoのドキュメントによると変数代入を許容していないそうです。
・カスタムテンプレートタグで回避することができる
・/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 %}