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

ビューがこのロジックをより多く処理する必要があるようです。Raunak Agarwal が述べたように、1 つまたは複数の曲をテンプレートに渡す場合、それぞれが同じになります。

をしているのも非常に奇妙です

{% for songs in song %}

それは正しく読めません。

もう少し近くで見に行きます。以下にもう少し書きました。ビューとモデルを見て、コードを調べた後、物事に光を当て、より良いヘルプ/回答を提供できるようにします。

于 2012-12-06T06:14:59.070 に答える
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 に答える