0

我想获取艺术家列表下的歌曲列表。我的艺术家类只包含艺术家的名字和姓氏。我的歌曲类包含一个艺术家的外键以及歌曲标题。我可以列出艺术家,但是当我尝试列出艺术家的歌曲时,我的 {% 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
4

4 回答 4

1

我不这么认为,在模板语言 if 语句中,您可以使用圆括号,它不会解析。尝试删除它...

{% if songs.artist.firstname == singer.firstname and songs.artist.lastname==singer.lastname%}
于 2012-12-06T01:13:23.617 回答
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 %}

我还删除了艺术家名字和姓氏的比较,这似乎没有意义:您已经在迭代该艺术家的歌曲集,因此不需要比较。

于 2012-12-06T09:09:53.390 回答
0

正如你所说,我的歌曲类包含一个艺术家的外键以及歌曲标题。- 你为什么不直接使用重组功能?

{% 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>
于 2012-12-06T06:51:14.600 回答
0

看来您的视图应该处理更多这种逻辑。就像 Raunak Agarwal 提到的,如果您将歌曲或歌曲传递到模板中,那么每首歌曲都将是相同的。

做一个也很奇怪

{% for songs in song %}

那只是不正确。

我会更近距离地参观风景。我在下面写了更多。在查看您的代码后,尽管查看视图和模型,但可以对事物有所了解,并提供更好的帮助/答案。

于 2012-12-06T06:14:59.070 回答