2017-10-19 87 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:啊,我看到了對這個問題的評論;您所需要的只是將模塊加載到模板中,併成爲已經註冊的應用的*部分*。 –