TemplateSyntaxError:无法解析余数

Rom*_*dgz 1 python django django-templates

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

在这里,我传递了一个包含作为键的项目 id 列表和作为每个 id 值的图像 URL 列表的 dict。我知道我应该将它集成到项目模型中,但由于我仍在使用 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]'
Run Code Online (Sandbox Code Playgroud)

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

{% for item in items[0:5] %}
Run Code Online (Sandbox Code Playgroud)

而且我也收到了同样的错误,即使这是相关答案中推荐的方法,aboput slicing data through a view.

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

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

Mar*_*ers 5

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

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

您可以编写自定义过滤器来实现此目的,如下所示,由 culebrón 编写

from django.template.defaulttags import register

@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)
Run Code Online (Sandbox Code Playgroud)

然后在模板中:

{{ img_gallery|get_item:item.id|first }}
Run Code Online (Sandbox Code Playgroud)

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