0

Django を学習しているだけで、テンプレートにレイアウトがある場合はそれらを一覧表示する状況を作成しようとしていますが、そうでない場合は表示されず、代わりに何もないと表示されます。

レイアウトのないテンプレートで「for layout...」ステートメントのみを使用すると、エラー メッセージが表示されました。

最初に「if」ステートメントを作成してページにレイアウトがあるかどうかを確認し、そうでない場合は「else」ステートメントを作成してレイアウトがないことを確認しました。

ただし、最終的な結果として、「for」は完全に無視されているように見え、「else」条件はすべてのページに適用されます (レイアウトが関連付けられているかどうかに関係なく)。

コード:

{% block header %}
    <h1>The name of this template? It's {{ boilerplate.name }}.</h1>
{% endblock %}

{% block content %}
    <p>&nbsp;</p>
    <p>{{ boilerplate.content }}</p>
    {% if layout in boilerplate.layouts %}
        {% for layout in boilerplate.layouts.all %}
        <p><a href="{{ layout.file.url }}">{{ layout.user }} -- {{ layout.name }} ({{ layout.file.size }})</a>
        {% endfor %}
    {% else %}
    <p>There are no layouts for this template.</p>
    {% endif %}
{% endblock %}

明らかに何かが欠けています。おそらく非常に単純なものです。私は何を間違っていますか?

4

3 に答える 3

3

あなたは間違っていますが、追加のタグ{% if layout in boilerplate.layouts %}を使用するよりも簡単にこれを達成する方法があります。if

ドキュメントに示されているように、オプションのemptyタグを使用して、レイアウトがない場合の状況を処理できます。サンプルコードを書き直す:

    {% for layout in boilerplate.layouts.all %}
    <p><a href="{{ layout.file.url }}">{{ layout.user }} -- {{ layout.name }} ({{ layout.file.size }})</a>
    {% empty %}
    <p>There are no layouts for this template.</p>
    {% endfor %}
于 2012-05-26T13:53:55.283 に答える
0

あなたの質問の主題に答えるために、はい、もちろんできます。あなたの問題を説明する方法からの私の推測では、 でレイアウトを探す方法に問題がある可能性がありますboilerplate.layouts

boilerplate.layoutsリレーショナルフィールドのようです。したがって、inそれだけでチェックを行うだけでは不十分な場合があります。このような場合、デバッグに非常に役立つため、シェルまたはビューでこのコードを操作して結果を確認することをお勧めします。

私の簡単な推測では、あなたがする必要がありますがlayout in boilerplate.layouts.all、私はあなたのモデルに十分に慣れていないので、ワイルドな推測です:)

于 2012-05-26T13:54:47.907 に答える
0

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#for-empty このタグを見てください

于 2012-05-26T13:52:32.703 に答える