【问题标题】:Django Custom Template Tag IssueDjango 自定义模板标签问题
【发布时间】:2017-04-13 11:50:54
【问题描述】:

如果没有模板标签的帮助,我没有找到从查询集中获取关系实例对象的选项,所以我正在尝试如下所述在 for 循环中使用自定义模板标签。但收到此错误:

 File "D:\Neon_ecl\Projects\shof\shof\smapy\views.py", line 276, in menulist
    'p'     :p
  File "C:\Python27\Scripts\tvapp_env\lib\site-packages\django\shortcuts.py", line 30, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "C:\Python27\Scripts\tvapp_env\lib\site-packages\django\template\loader.py", line 67, in render_to_string
    template = get_template(template_name, using=using)
  File "C:\Python27\Scripts\tvapp_env\lib\site-packages\django\template\loader.py", line 21, in get_template
    return engine.get_template(template_name)
  File "C:\Python27\Scripts\tvapp_env\lib\site-packages\django\template\backends\django.py", line 39, in get_template
    return Template(self.engine.get_template(template_name), self)
  File "C:\Python27\Scripts\tvapp_env\lib\site-packages\django\template\engine.py", line 160, in get_template
    template, origin = self.find_template(template_name)
  File "C:\Python27\Scripts\tvapp_env\lib\site-packages\django\template\engine.py", line 134, in find_template
    name, template_dirs=dirs, skip=skip,
  File "C:\Python27\Scripts\tvapp_env\lib\site-packages\django\template\loaders\base.py", line 44, in get_template
    contents, origin, origin.template_name, self.engine,
  File "C:\Python27\Scripts\tvapp_env\lib\site-packages\django\template\base.py", line 191, in __init__
    self.nodelist = self.compile_nodelist()
  File "C:\Python27\Scripts\tvapp_env\lib\site-packages\django\template\base.py", line 233, in compile_nodelist
    return parser.parse()
  File "C:\Python27\Scripts\tvapp_env\lib\site-packages\django\template\base.py", line 518, in parse
    raise self.error(token, e)
TemplateSyntaxError: Invalid block tag on line 28: 'pdscheck', expected 'empty' or 'endfor'. Did you forget to register or load this tag?

在模板中:

  <tbody>{% load smapy_extras %}
  {% for obj in pds %}
    {% pdscheck czpds obj %}
        {{ temppd }}
    {% if obj in p %}<tr style="color:red;">{%else%}
    <tr style="color:grey;">{%endif%}
      <th scope="row">{{ obj.id }}</th>
      <td>{{ obj.pd_name }}</td>
      <td>{{ obj.volume }}</td>
      <td>{{ obj.mrp }}  </td>
      {% if obj in czpds %}<td><input type=submit value="Disable" style="width:100%" onclick="addPds({{shop.id}},{{heading.id}},'pdctg',{{obj.id}})"></form> </td>
    {% else %} <td><input type=submit value="Enable" style="width:100%" onclick="addPds({{shop.id}},{{heading.id}},'pdctg',{{obj.id}})"></form> </td>
    {%endif%}
    </tr>
   {% endfor %} 
    </tbody>

模板标签文件: 从 django 导入模板

register = template.Library()

@register.filter(name='pdscheck')
def pdscheck(czpds, obj):
    tempctg = 'pdctg'
    temppd = czpds.filter(tempctg=obj)
    return {'temppd': temppd}

【问题讨论】:

  • 您是否重新启动了您的开发服务器? Autoreload 不会检测带有模板标签的新模块。

标签: django django-templates


【解决方案1】:

您注册的是过滤器,而不是标签。

【讨论】:

  • 我应该改变什么,对不起这么多困惑,没有时间再次阅读文档。
  • 我确实建议再次阅读文档。您使用注册装饰器添加过滤器(@register.filter(...)),而您实际上想要一个标签(@register.simple_tag)
  • 是的,我的错
  • 谢谢 已修复
猜你喜欢
  • 2011-05-02
  • 1970-01-01
  • 2021-07-13
  • 2015-01-20
  • 2012-03-15
  • 2020-01-24
  • 2015-12-17
  • 2011-03-31
相关资源
最近更新 更多