Djangoではテンプレートで変数の代入を容認していない。
Django の設計思想 — Django v1.0 documentation
` テンプレートシステムでは、以下の機能を意図的に使えないようにしています:
変数の代入 高度なロジック `
テンプレートにロジックをさせるのはあまり良くないからかも。
ちなみにこちらのサイトにwithを使った値の渡し方もある
あとは、こちらに django - How to set a value of a variable inside a template code? - Stack Overflow
のように変数に代入させるものっぽいが上手く表示できなかった。
apps/templatetags/extra_tags.py を作り、
from django import template import re register = template.Library() class SetVarNode(template.Node): def __init__(self, new_val, var_name): self.new_val = new_val self.var_name = var_name def render(self, context): context[self.var_name] = self.new_val return '' @register.tag def setvar(parser,token): # This version uses a regular expression to parse tag contents. try: # Splitting by None == splitting by spaces. tag_name, arg = token.contents.split(None, 1) except ValueError: raise template.TemplateSyntaxError, "%r tag requires arguments" % token.contents.split()[0] m = re.search(r'(.*?) as (\w+)', arg) if not m: raise template.TemplateSyntaxError, "%r tag had invalid arguments" % tag_name new_val, var_name = m.groups() if not (new_val[0] == new_val[-1] and new_val[0] in ('"', "'")): raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name return SetVarNode(new_val[1:-1], var_name)
とやり、
テンプレートでは、
{% block extrastyle %}
でインポートした後、
{% setvar "a string" as new_template_var %}
で代入して
{{ new_template_var }}
としてみたが表示できなかった。
- 作者: ビープラウド
- 出版社/メーカー: 秀和システム
- 発売日: 2012/03/26
- メディア: 単行本
- 購入: 6人 クリック: 765回
- この商品を含むブログ (27件) を見る
Instant Django Application Development Starter
- 作者: Mauro Rocco
- 出版社/メーカー: Packt Publishing
- 発売日: 2013/02/22
- メディア: Kindle版
- この商品を含むブログを見る
- 作者: Javed Khan,Shabda Raaj,Thejaswi Puthraya
- 発売日: 2011/12/21
- メディア: Kindle版
- この商品を含むブログを見る