2017-03-11 21 views
0

私はHTMLのテーブル形式以下の持っている必要があります。 enter image description hereは、HTMLテーブルにPythonのデータを追加する方法

私の質問ですが、私はこの次の表の書式を実装することができるように、私は正しく私の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

リストのリストがあると何が問題になりますか? – elena

+0

@elena何も間違っていますが、私の場合はデータを "data.versions"、 "image.files"などをレイアウトコードで使用できる形式にしたいと思います。私はちょうどそれがより可読性と保守性に優れていると思う。 – m5seppal

答えて

0

何か:

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

+0

私は質問を更新しました。私は問題が何であるかがはっきりしていると思います。より正確な答えを出すのに役立つかどうかを確認できますか? – m5seppal

0

良い方法があります。 まず、データ用のモデル(データベーステーブル)を作成し、そこにあるすべてのデータを保存します。あなたは、そのようにデータを表現する上でより多くの力を持っています。

Models.py

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

(私はあなたのデータがどのように見えるかに仮定をたくさん作ってるんだ、ので、あなたのニーズに基づいて、これらを変更したい場合があります)

良いオプション(画像の配列を作成する場合)は、すべての画像を1つのモデルに保存し、バージョン表にM2Mを作成することです:

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

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

次に、HTMLテンプレートに送る前に、 "Form/View"に必要なロジックを配置することができます。

Djangoを使って作業するときは、すべてをバックエンドに置いて、すでにソートされて表示できるデータをレンダリングするためだけにHTMLを使用してみてください。

上記のいずれかを詳しく説明したい場合は、お知らせください。

+0

この質問に関連する現在のデータベースモデルを追加しました。今私はちょうど私がそれ以上のロジックを必要とせずにテンプレートでそれをループすることができますフォーマットにデータを配置する方法を見つける必要があります。あなたが言ったように、私はレイアウトにどんなロジックも望んでいません。 – m5seppal

関連する問題