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

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#for-empty 看这个标签

于 2012-05-26T13:52:32.703 回答
0

要回答您的问题,是的,您当然可以。从您描述问题的方式来看,我的猜测是您在boilerplate.layouts.

boilerplate.layouts看起来它是一个关系字段。因此,in仅对其进行检查可能还不够。在这种情况下,我建议在 shell 中或在视图中使用此代码并在那里查看结果,因为它将极大地帮助调试。

我的简单猜测是你需要做layout in boilerplate.layouts.all,但我对你的模型不够熟悉,所以猜测:)

于 2012-05-26T13:54:47.907 回答