【问题标题】:TemplateSyntaxError: Could not parse the remainderTemplateSyntaxError:无法解析剩余部分
【发布时间】:2018-03-31 04:37:31
【问题描述】:

每次我尝试访问 Django 模板中的列表时都会收到此错误消息。我已经检查了类似问题的答案,但问题通常是缺少 % 或某处的其他字符。只要我能看到,情况并非如此:

在这里,我传递了一个 dict,其中包含作为键的项目 id 列表和图像的 URL 列表作为每个 id 的值。我知道我应该将它集成到项目模型中,但由于我仍在使用 SQLite3 进行开发,我无法轻松存储列表。无论如何,我对这个问题很感兴趣。所以:

<a href="{% url 'details_view' item_id=item.id %}"><img class="hover-image" src="{{ img_gallery[item.id][0] }}" alt="">

Exception Value:    
Could not parse the remainder: '['item.id'][0]' from 'img_gallery['item.id'][0]'

另外,昨天我尝试使用 bootstrap4 flex-grid 轻松实现 5 列。由于我使用分页来检索 20 个项目,我的想法是为每一行切片项目列表(模型),例如:

{% for item in items[0:5] %}

而且我也收到了同样的错误,即使这是相关答案中推荐的方法 aboput 切片数据通过视图传递。

在这两种情况下我都找不到问题,我认为两者都有某种关联。

我正在使用最新的 Django 1.11.6 和 Python 3.5.2。

【问题讨论】:

  • jinja2 != django 模板;两者是相关的,但 Django 不使用 Jinja,后者最初是受到 Django 模板语法的启发,但完全是一个单独的项目。
  • @MartijnPieters 很高兴知道,我一直认为这是 100% jinja2。这是错误的根源吗?这是 Django 模板的错误语法吗?
  • 是的,请看下面我的回答。
  • 您不应将get_item 添加到您的INSTALLED_APPStemplatetags 目录在您的shop 应用程序中,它可能已经在INSTALLED_APPS 中。

标签: python django django-templates


【解决方案1】:

您似乎对 Jinja2 语法和 Django template syntax 感到困惑。 Jinja2 是一个单独的项目,受 Django 启发,但 Django 本身并未使用。

在 Django 模板语法中,{{...}} 中的变量总是 使用点表示法,不支持[...] 订阅。开箱即用的语言不支持字典键查找

您可以通过write a custom filter 来实现这一点,如下所示,written by culebrón

from django.template.defaulttags import register

@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)

然后在模板中:

{{ img_gallery|get_item:item.id|first }}

或者,您可以在 Django 项目中切换到使用 Jinja2,替换内置模板语言:How to use jinja2 as a templating engine in Django 1.8

【讨论】:

  • 我按照docs.djangoproject.com/en/1.11/howto/custom-template-tags 中的说明进行操作,但仍然收到错误消息“没有名为'get_item' 的模块”。我已更新问题以提供更多数据
  • @RomanRdgz:从接受我想你已经设法解决它?在我看来,您的 __init__.py 拼写错误。无论如何,这将是一个新问题,语法问题已经解决。
  • @RomanRdgz:啊,我看到了这个问题的评论;您只需要在模板中加载模块并成为已注册应用的一部分
猜你喜欢
  • 2011-11-06
  • 2011-07-11
  • 2015-03-06
  • 1970-01-01
  • 2016-06-04
  • 2019-12-20
  • 2011-04-03
  • 2013-10-26
  • 2020-05-10
相关资源
最近更新 更多