在django模板中获取模板语法错误

时间:2013-06-23 06:19:45

标签: python django django-templates

我的代码在视图中:

tracks = client.get('/tracks', order='hotness', limit=4)   
artwork_url=[]
for track in tracks:
    artwork_url.append(str(track.artwork_url).replace("large", "t300x300"))        


val={"tracks":tracks,"artwork_url":artwork_url}    
return render_to_response('music/tracks.html',val)

in .html

{% for track in tracks %} 
<li>
    <div class="genre-image">
        <img src="{{   artwork_url[forloop.counter] }}">
    </div>
{% endfor %} 

错误:

Exception Type: TemplateSyntaxError 
Exception Value:  Could not parse the remainder: '[forloop.counter]' from 'artwork_url[forloop.counter]'

1 个答案:

答案 0 :(得分:4)

由于您的artwork_url是一个列表,因此合理的方法是按以下方式访问它:

artwork_url.forloop.counter

但它不起作用。不幸的是,Django模板语言不是 高级。

您应该像这样访问它。

{% for track in tracks %} 
<li><div class="genre-image">
<img src="{{ track.artwork_url }}">
</div>
{% endfor %}

但这要求曲目是可变的,需要你在后端更改它。

因此,如果您无法修改曲目,则必须实现类似此类的自定义模板过滤器

{{ track.artwork_url|myFormatter:'t300' }}

一个非常小而简单的格式化程序:

@register.filter(name='myDate')
def myFormatter(value, arg):
    if arg == 't300':
        arg = 't300x300'
    return str(value).replace("large", arg)