TemplateSyntaxError:无法解析余数

时间:2017-10-19 07:37:07

标签: python django django-templates

每次尝试访问Django模板中的列表时,我都会收到此错误。我已经检查了类似问题的答案,但问题通常是缺少%或某些其他角色。只要我能看到,情况就不是这样了:

这里我传递的dict包含一个item 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] %}

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

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

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

1 个答案:

答案 0 :(得分:3)

您似乎对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