我的问题是,我应该如何正确组织我的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)
答案 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只是为了呈现已经排序并准备好呈现的数据。
如果您希望我详细说明上述任何内容,请告诉我。