zoukankan      html  css  js  c++  java
  • django模板引擎自定义变量

    定义临时变量:

    {% with i=1 %}
    {{i}}
    {% endwith %}

    定义对临时变量操作的tag

    在templatetags中创建set_val.py

    内容是

    from django import template
    import logging
    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""
     
    class VarAddOneNode(template.Node):
     
        def __init__(self, var_name):
            self.var_name = var_name
     
        def render(self, context):
            try:
                value = template.Variable(self.var_name).resolve(context)
                context[self.var_name] = str( int(value) + 1 )
            except template.VariableDoesNotExist:
                value = ""
     
            return u""
     
    def set_var(parser, token):
        """
            {% set <var_name>  = <var_value> %}
        """
        parts = token.split_contents()
        logging.info('len(parts)=' + str(len(parts)))
        if len(parts) == 2:
            content = parts[1]
            if content[len(content)-2 :len(content)] == '++':
                var_name = content[:len(content) - 2]
                return VarAddOneNode(var_name)
            else:
                return u""
        elif len(parts) == 4:
            return SetVarNode(parts[1], parts[3])
            # raise template.TemplateSyntaxError("'set' tag must be of the form:  {% set <var_name>  = <var_value> %}")
     
     
    register.tag('set', set_var)

    然后在template中引入

    {% load set_val %}

    前端代码示例

    {% load set_val %}
        <div class="layui-form-item">
            <div class="layui-form-label">商品尺码</div>
            <div class="layui-input-block">
                {% with i=1 %}
                {% set i = 2 %}
                    {% for size in  size_list %}
                        <div class="layui-col-md2">
                            <div class="layui-row">
                                原名:{{ size.sizeName }}
                            </div>
                            名字:
                            <input style=" 40px;display:inline;" type="text" name="color" ,
                                   lay-verify="required"
                                   autocomplete="off" placeholder=""
                                   class="layui-input" value={{ size.sizeName }}>
                            <br>
                            <input type="checkbox" name="size{{ i }}" lay-skin="primary" checked="checked">
                            {% set i++ %}
                        </div>
                    {% endfor %}
                {% endwith %}
            </div>
        </div>
    
    
  • 相关阅读:
    驱动开发之基本
    Bitmap文件格式+生成一个BMP文件
    PPP 转义字符 编码 和 解码
    数组数据整体按位左移或右移一位
    一个assert的写法
    c++11 右值引用 && std::move()
    openMP一小时初探
    linux命令学习_实验楼(一)
    50 行 Python 代码完成图片转字符
    LFW精确度验证__c++双线程读写txt
  • 原文地址:https://www.cnblogs.com/aaron-agu/p/10557544.html
Copyright © 2011-2022 走看看