0

我的代码在视图中:

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]'
4

1 回答 1

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)
于 2013-06-23T06:38:33.170 回答