2016-07-06 13 views
0

Djangoモデルフィールドにcolor_paletteというタプルのリストがあります。画像からの5つのRGBカラー値のセット。Djangoモデルフィールドにはタプルのリストが含まれています - テンプレートで解凍する方法

[(29, 28, 28), 
(239, 244, 244), 
(158, 165, 172), 
(89, 162, 203), 
(106, 141, 169)] 

他のモデルフィールドと一緒にこれらのテンプレートをアンパックする必要があります。

{% for screenshot in country.screenshots_set.all %} 
    {{ screenshot.color_palette }} 
    <img src="{{ screenshot.thumbnail.url }}" alt="{{ country.name }}" class="thumbnail" width="150" height="150" style="border:none;"/> 
{% endfor %} 

をまだテンプレートでそれらを解凍する方法を考え出したていない:

{% for screenshot in country.screenshots_set.all %} 
    <img src="{{ screenshot.thumbnail.url }}" alt="{{ country.name }}" class="thumbnail" width="150" height="150" style="border:none;"/> 
{% endfor %}   

私が使用して、テンプレートに表示するタプルのリスト全体を取得することができます。

私は、リストの文字

<ul> 
    {% for color in screenshot.color_palette %}  
     <li>{{ color.0 }}</li> 
     <li>{{ color.1 }}</li> 
     <li>{{ color.2 }}</li> 
     <li>{{ color.3 }}</li> 
     <li>{{ color.4 }}</li> 
    {% endfor %} 
</ul> 

と、リスト内のすべての文字で分割が発生し、この試みに分割され、この試みている:

<ul> 
    {% for color in screenshot.color_palette %} 
     <li>{{ color }}</li> 
    {% endfor %}  
</ul> 

は私がしようとしています。このことも可能な方法ですがそれをするために?

私にとってはうまくいかないタプルを解くための解法は、ビューで生成され、テンプレートに送られるリストのためのものです。

私は反復しようとしているものが文字列であり、ビューは反復可能なオブジェクトを送信するためです。

+0

あなたのモデルを投稿できますか? –

+1

テンプレートに渡される 'color_palette'は文字列であり、タプルのリストではありません。コンテキストを生成しているコードを投稿し、実際に文字列ではなくリストであることを確認できますか? – solarissmoke

+0

ああ。希望的思考。はい、color_paletteフィールドはテキストデータ型です。私はそれがタイプリストであることができるかどうかを見なければならないと思う。これを行うための他の方法はありますか? – curtisp

答えて

2

私はモデルメソッドを作成し、必要に応じて使用します。あなたがrender(request, {'screenshot': Screenshot.objects.first()}でテンプレートをレンダリングすると仮定し

from ast import literal_eval 

class Screenshot(models.Model): 
    colors = models.CharField(max_length=255) 

    def colors_list(self): 
     # literal_eval, turns your string into an actual list of tuples 
     colors = literal_eval(self.colors) 

     return colors 

、あなたのテンプレートで{{ screenshot.colors_list }}であなた色のリストを取得することができます。

+0

グレートは完璧に働いた。私は 'def colors_list(self):' 'colors = literal_eval(self.color_palette)' 'return colors'を使ってテンプレート内で' {%for color in screenshot.colors_list%} 'をループして、作成するタプル項目を検索しました'rgb({{color}}、{{color.1}}、{{color.2}})' – curtisp

+0

うれしいです:) –

関連する問題