【问题标题】:How to add Python data to HTML table如何将 Python 数据添加到 HTML 表中
【发布时间】:2017-03-11 20:15:02
【问题描述】:

我需要在 HTML 中具有以下表格格式:

我的问题是,我应该如何正确组织我的 Python 数据,以便我可以以一种干净的 Python 方式实现下表格式。所有图像都属于某个版本,因此图像在右栏中很重要(顺序很重要)。有些版本没有所有(或任何)图像,所以在这种情况下,我会检查“image == None”并显示“?”等等,而不是图像。因此,“空”槽也应保存到数据中。

注意:我正在使用 Django 执行此操作,并且我使用 Django 模板来呈现它。理想情况下,我可以在模板中执行以下操作:

<table>
  <thead>
    <tr>
      {% for version in data.versions %}
      <th>{{ version }}</th>
      {% endfor %}
    </tr>
  </thead>
  <tbody>
    {% for image in data.images %}
    <tr>
      {% for file in image.files %}
        {% if file == None %}
        <td>No image</td>
        {% else %}
        <td>{{ file }}</td>
        {% endif %}
      {% endfor %}
    </tr>
    {% endfor %}
  </tbody>
</table>

更新:问题实际上是如何在后端正确组织数据。我需要手动初始化要放入数据的版本列表(Version1、Version2 等)并为它们创建列。订购很重要,所以我需要保留它。然后我将搜索具有 X 数量图像的某些对象,这些对象都有特定的版本。然后我需要遍历这些对象(对于对象中的对象)并遍历某个对象的图像(对于 object.images 中的图像),并且我应该将每个图像附加到某个版本的列(添加到“key”所在的列等== image.version)。如果某列没有图像,则值应为“无”等。

我可以用列表列表来实现这个,例如:

data = [
    ['Version1', 'Version2', etc.],
    ['image',None, etc.],
    ['image', 'image', etc.],
    etc.
]

但我很确定有更好的方法在 Python 中实现它。因此,非常欢迎任何更好的建议。

更新 2:Django 模型可能如下所示:

class Version(models.Model):
    name = models.CharField(max_length=255)


class Image(models.Model):
    file = models.ImageField(upload_to='images')
    version = models.ForeignKey(Version)


class Object(models.Model):
    images = models.ManyToManyField(Image)

【问题讨论】:

  • 列表列表有什么问题?
  • @elena 没有错,但在我的情况下,我宁愿数据格式允许我在布局代码中使用“data.versions”、“image.files”等。我只是认为这样更具可读性和可维护性。

标签: python html django data-structures html-table


【解决方案1】:

类似这样的:

data_versions = { v1 : [img1, img2 ...], v2: [img1, ....]}

【讨论】:

  • 我更新了问题,我认为现在更清楚问题是什么了。你能检查一下它是否有助于给出更准确的答案。
【解决方案2】:

有更好的方法。 首先为您的数据创建一个模型(数据库表)并将所有内容存储在那里。通过这种方式,您将拥有更大的数据表示能力。

Models.py

class VersionImage(models.Model):
    version_number = models.IntegerField()
    image_1 = models.ImageField()
    image_2 = models.ImageField()
    image_3 = models.ImageField()

(我对您的数据做了很多假设,因此可能需要根据您的需要进行更改)

更好的选择(如果您要拥有一组图像)是将所有图像存储在一个模型中,并为您的版本表创建一个 M2M:

class ImageModel(models.Model):
    image = models.ImageField()

class VersionModel(models.Model):
    version_number = models.IntegerField()
    image = models.ManyToManyField(ImageModel)

然后您可以将所需的逻辑放在“表单/视图”上,然后再将其发送到您的 HTML 模板。

在使用 Django 时,尝试将所有内容放在后端,并使用 HTML 仅用于呈现已排序并准备呈现的数据。

如果您希望我详细说明上述任何内容,请告诉我。

【讨论】:

  • 谢谢,我刚刚添加了与此问题相关的当前数据库模型。现在我应该找到一种方法将这些数据格式化,这样我就可以在模板中循环它,而不需要任何进一步的逻辑。正如你所说,我不想在布局中有任何逻辑。
猜你喜欢
  • 2019-08-13
  • 2021-08-18
  • 1970-01-01
  • 2021-01-10
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多