使用 django 和 layui,TemplateSyntaxError 错误 {{# }}

·  阅读 91
  1. 报错 使用 django 和 layui 写后台网站时,在 table.render({ })中使用 switch 开关,出现如下错误: django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: '# if(1){' from '# if(1){' django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: ' == 10006 ? 'checked' : ''' from 'd.id == 10006 ? 'checked' : '''

  2. 分析: 最终原因是 django 自动识别 {{ }} 为模板的变量代码:

    {{ 变量 }}:变量代码 {% 代码段落 %}:逻辑代码

而 {{# if(false)}} 是 js 的逻辑代码,被django 误读,

  1. 解决办法: 使用{% verbatim %}...{% endverbatim %} 标记即可

    # 形如:
    {% verbatim %}
    # 以下为 django的特殊标记
    {% extends "baseframe/basemanage.htm" %}
    {% load pager %}
    {% load convert %}
    {% block searchField %}
    {% endblock %}
    # 以上为 django的特殊标记
    {% endverbatim %}
    复制代码
  2. 代码复现 js 代码:

    <script type="text/html" id="statusTemp">
    {{#  if(d.media.status==1){ }}
        <input type="checkbox" name="status" lay-skin="switch" checked   lay-text="开启|关闭"  value= {{ d.media.id}}  lay-filter="status" >
    {{#  } else { }}
        <input type="checkbox" name="status" lay-skin="switch"  lay-text="开启|关闭"  value= {{ d.media.id} lay-filter="status" >
    {{#  } }}
    复制代码

    报错信息:

    django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: '#  if(d.media.status==1){'
    复制代码

    另一种方式:

    input type="checkbox" name="lock" value="{{d.id}}" title="锁定" lay-filter="lockDemo" {{ d.id == 10006 ? 'checked' : '' }}>
    
    复制代码

    报错信息:

    django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: ' == 10006 ? 'checked' : ''' from 'd.id == 10006 ? 'checked' : '''
    复制代码
  3. 参考资料

    django 模板中输出模板关键字 https://www.douban.com/note/353142936/

    有时候我们需要通过Django提供的模板工具来生成文件,但是文件中恰好又包括了Django模板的关键如:

    {% extends "baseframe/basemanage.htm" %}
    {% load pager %}
    {% load convert %}
    
    {% block searchField %}
    {% endblock %}
    我需要在我生成后的模板中保留这样的文字片段,在django1.5版本后内置了这样的一个标签,就可以将标签内的文字片段原样输出,而不进行解析如:
    {% verbatim %}
    {% extends "baseframe/basemanage.htm" %}
    {% load pager %}
    {% load convert %}
    {% block searchField %}
    {% endblock %}
    {% endverbatim %}
    复制代码
分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改