Django:如何编写if语句

时间:2012-12-06 00:57:17

标签: django django-templates

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

答案 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 %}

我还删除了艺术家名字和姓氏的比较,这似乎没有意义:你已经在浏览那位艺术家的歌曲集,所以不需要进行比较。