2016-12-29 11 views
2

私のモデルデータベースにある別のモデルの各アイコンの下にあるすべてのフォントをリストしています。テンプレート付きのオブジェクトのリストからランダムなオブジェクトを取得

各アイコンのランダムなフォントを取得します。ここで

は、私は私のテンプレートファイルを表示する方法を示します。

class Font(models.Model): 
    font_name = models.CharField(max_length=100) 
    font_css = models.CharField(max_length=100) 

class FormOne(models.Model): 
    name = models.CharField(max_length=40) 
    checkbox = models.ManyToManyField(Font, blank=True) 
    ... 

class Icons(models.Model): 
    icon_name = models.CharField(max_length=100) 
    ... 

class FormTwo(models.Model): 
    owner = models.ForeignKey(FormOne) 
    icon = models.ManyToManyField(Icons, blank=True) 
    ... 

ここ
context = {'FormOne':FormOne.objects.all(), 'FormTwo':FormTwo.objects.all()} 

は私モデル構造である:私はこのような私のビューのコンテキストを持っ

{% for Fo in FormOne %} 
    {% for Ft in FormTwo %} 
     {% for f in Ft.icon.all %}   
      <p>{{ f.icon_name }}</p>  #for each icon name 
      {% for f in Fo.checkbox.all %} 
       <p>{{ f.font_name }}</p> #show one random font name. 
      {% endfor %} 
     {% endfor %} 
    {% endfor %} 
{% endfor %} 

どうすれば実現できますか?

答えて

0

custom filtersを使用できます。ここで

がリストからランダムに要素選択するためのフィルタです:

import random 
from django import template 

register = template.Library() 

@register.filter('random_font', random_font) 
def random_font(l):  
    f = dict(random.choice(list(l))) 
    return "%s : %s" % (f['font_name'], f['font_css']) 

NBを、作業の多くは、カスタムフィルタを登録し、registerインスタンスを作成することを含む、あなたの最初のカスタムフィルタを書面であり register.filterデコレータを使用し、テンプレートにカスタム フィルタのライブラリを追加します。

+0

試してみましたが、フォント名の最初の文字がリストされているので使えませんでしたが、フォント名は1つしか返しません。 –

+0

'{%for f | pick_random in Fo.box.all %} 'この行にタグを挿入する必要がありますが、どうすればいいですか? (このコードは何も表示されません) –

+0

try: '{{Fo.checkbox.all | pick_random}}' –

関連する問題