2013-06-23 119 views
0

我的视图代码:越来越模板语法错误在Django模板

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) 

以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]' 
+0

轨道的元素是不可变的吗?如果没有,那么只需附加追踪变量而不是artwork_url。 – mariodev

回答

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)