Django表单作为表格

7rfyedvj  于 2022-12-14  发布在  Go
关注(0)|答案(2)|浏览(136)

下面的代码在django模板语言中是有效的,但我不知道为什么。这段代码的目的是将表单显示为一个有很多列的表格。第一件让我感到困惑的事情是,打开一行的标签从来没有给出,但它仍然是制造的。

{% extends 'base.html' %}
{% load render_table from django_tables2 %}
{% block content %}
<form method="get">
    {% csrf_token %}
    <table>
        <tbody>
            {% for field in filter.form %}
    <td>{{ field.label}}</td>
    <td>{{ field }}</td>
                {% if forloop.counter|divisibleby:"4"%}
    </tr>
                {% endif %}
            {% endfor %}
        </tbody>
    </table>
    <input type="submit" value="Search">
</form>
{% render_table table%}
{% endblock %}

这将生成一个四列的表格。是否有任何方法可以显式声明开始标记?为什么这段代码可以工作?

我试过显式地为行创建标记,但是这并没有正确地创建表。它有一个空行空间和一个额外的行。

{% extends 'base.html' %}
{% load render_table from django_tables2 %}
{% block content %}

<form method="get">
    {% csrf_token %}
    <table>
        <tbody>
            {% for field in filter.form %}
                {% if forloop.counter|divisibleby:"5"%}
    <tr>
                {% endif %}
                {% if forloop.counter|divisibleby:"5" == False %}
    <td>{{ field.label}}</td>
    <td>{{ field }}</td>
                {% endif %}
                {% if forloop.counter|divisibleby:"5"%}
    </tr>
                {% endif %}
            {% endfor %}
        </tbody>
    </table>
    <input type="submit" value="Buscar">
</form>

{% render_table table%}
{% endblock %}
polhcujo

polhcujo1#

**为什么这样做?**HTML是相当宽松的,浏览器可以推断出你试图用上下文做什么。tdtr之前,应该有一行在-〉add one之前
**有没有任何方法可以显式地声明开始标记?**我相信通过结合现有的和{% forloop.first %} + {% forloop.last %}可以做到这一点。

<table>
  <tbody>
  {% for field in filter.form %}

    {% if forloop.first %}  
      <tr>
    {% endif %}

    <td>{{ field.label}}</td>
    <td>{{ field }}</td>

    {% if forloop.last %}  
      <tr>
    {% elif forloop.counter|divisibleby:"4"%}
      </tr>
      <tr>
    {% endif %}

  {% endfor %}
  </tbody>
</table>
qco9c6ql

qco9c6ql2#

谢谢,我已经把下面的代码也工作。我认为现在是更深思熟虑。第一个if创建了开始标记,因为下一个标记应该是一对从可分割生成的,这些都在elif中,if包含了最后一个标记,它应该是一个单独的结束标记,因为如果它是一对可分割的标记,它将创建一个额外的行。

{% extends 'base.html' %}
{% load render_table from django_tables2 %}
{% block content %}

<form method="get">
    {% csrf_token %}
    <table>
        <tbody>
            {% for field in filter.form %}
                {% if forloop.first %}
                    <tr>
                {% endif %}
                    <td>{{ field.label}}</td>
                    <td>{{ field }}</td>
                {% if forloop.last %}
                    </tr>
                {% elif forloop.counter|divisibleby:"4"%}
                    </tr>
                    <tr>
                {% endif %}
            {% endfor %}
        </tbody>
    </table>
    <input type="submit" value="Buscar">
</form>

{% render_table table%}
{% endblock %}

相关问题