2017-10-19 92 views
1

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

在这里,我传递一个包含项目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切片数据与视图传递。

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

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

+2

jinja2!= django模板;这两者是相关的,但Django不使用Jinja,后者最初是受Django模板语法的启发,但完全是一个单独的项目。 –

+0

@MartijnPieters很高兴知道,我一直认为这是100%jinja2。这是错误的根源吗? Django模板的语法是否错误? –

+0

是的,请参阅下面的答案。 –

回答

3

您似乎在Jinja2语法和Django template syntax之间感到困惑。 Jinja2是一个独立的项目,由Django启发,但Django本身没有使用。在{{...}}总是使用点符号

在Django的模板语法,变量,[...]订阅不支持。开箱即用,语言不支持字典密钥查找。然后

from django.template.defaulttags import register 

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

模板:

可以write a custom filter实现这一点,像下面,written by culebrón

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

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

+0

我按照https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/中的说明操作,但仍然收到错误“No module named'get_item'”。我已更新问题以提供更多数据 –

+0

@RomanRdgz:从接受我认为你已经设法解决它?它看起来像我有一个'__init __。py'拼写错误。无论如何,这将是一个新问题,解决了语法问题。 –

+0

@RomanRdgz:啊,我看到了对这个问题的评论;您所需要的只是将模块加载到模板中,并成为已经注册的应用的*部分*。 –