我想获得艺术家名单下的歌曲列表。 我的艺术家课只包含艺术家的名字和姓氏。 我的歌曲类包含艺术家的外键和歌曲标题。 我可以列出艺术家,但是当我尝试列出我得到的艺术家的歌曲时,我的{%endif%}中的错误结束了我的if语句{%if song%}。
{% extends "base.html" %}
{% block heading %}Music Catalog{% endblock %}
{% block content %}
{% if user.username %}
<p>Welcome {{ user.username }}!</p>
{% if artist %}
<u1>
{% for singer in artist %}
<li>{{ singer.firstname }} {{ singer.lastname }}</li>
{% if song %}
<u1>
{% for songs in song %}
{% if (songs.artist.firstname == singer.firstname
and songs.artist.lastname == singer.lastname) %}
<li>{{ songs.title }}</li>
{% endif %}
{% endfor %}
</u1>
{% endif %}
{% endfor %}
</u1>
{% else %}
<p>No artists were found in the music catalog.</p>
{% endif %}
{% else %}
<p>You need to <a href="/login/">login</a> to see your music catalog.</p>
{% endif %}
{% endblock %}
enter code here
答案 0 :(得分:1)
我不这么认为,在模板语言if语句中你可以使用圆括号它不会解析。尝试删除它......
{% if songs.artist.firstname == singer.firstname and songs.artist.lastname==singer.lastname%}
答案 1 :(得分:0)
您的视图似乎应该处理更多这种逻辑。就像Raunak Agarwal所提到的,如果你将你的歌曲或歌曲传递给模板,那么每个人都将是相同的。
做一个
也很奇怪{% for songs in song %}
那只是看不对。
我会更近距离地观看视图。我在下面写了更多。在查看了你的代码后,虽然看一下视图以及模型会对事情有所了解,并且可以提供更好的帮助/答案。
答案 2 :(得分:0)
正如您所说我的歌曲类包含艺术家的外键以及歌曲标题。 - 为什么不使用regroup功能?
{% regroup song by artist as artist_list %}
<ul>
{% for artist in artist_list %}
<li>{{ artist.grouper }}
<ul>
{% for songs in artist.list %}
<li>{{ songs.title }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
答案 3 :(得分:0)
是的,您的if song
行不正确。从模板中可以清楚地看出,此时您甚至没有song
属性。它应该来自哪里?据推测,这是singer
上的一个相关集,但你没有在模板中这样说过。
你可能想要这样的东西:
{% for singer in artist %}
<li>{{ singer.firstname }} {{ singer.lastname }}
{% with songs as singer.song_set.all %}
{% if songs %}
<ul>
{% for song in songs %}
<li>{{ song.title }}</li>
{% endfor %}
</uL>
{% endif %}
{% endwith %}
</li>
{% endfor %}
我还删除了艺术家名字和姓氏的比较,这似乎没有意义:你已经在浏览那位艺术家的歌曲集,所以不需要进行比较。