万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    Djangoのテンプレートで変数

    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 }}

    としてみたが表示できなかった。

    Pythonプロフェッショナルプログラミング

    Pythonプロフェッショナルプログラミング

    Instant Django Application Development Starter

    Instant Django Application Development Starter

    Django Design Patterns

    Django Design Patterns