如何将Python数据添加到HTML表

时间:2017-03-11 10:24:55

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

我需要在HTML中使用以下表格格式: enter image description here

我的问题是,我应该如何正确组织我的Python数据,以便我可以以干净的Pythonic方式实现以下表格式。所有图像都属于特定版本,因此图像在右列(顺序很重要)非常重要。有些版本没有所有(或任何)图像,所以在这种情况下,我会检查“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>

更新:问题实际上是如何在后端正确组织数据。我需要手动初始化一个版本列表(版本1,版本2等)我想放入数据并为这些创建列。订购很重要,所以我需要保持这一点。然后我将搜索具有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)

2 个答案:

答案 0 :(得分:0)

这样的事情:

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

答案 1 :(得分:0)

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

<强> 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)

然后你可以把你想要的逻辑放在&#34; Form / View&#34;在将其发送到您的HTML模板之前。

使用Django时,尝试将所有内容放在后端,并使用HTML只是为了呈现已经排序并准备好呈现的数据。

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