2016-11-02 3 views
0

私は以下の見解を持っています。このDjangoテンプレートのオブジェクトの辞書をどのように反復すべきですか?

def select_classes(request): 
... 
      classesBySelectedGrade = courseBlock.objects.filter(grades__grade__contains=form['grade'].value()).order_by(
       'time') 
      classOptionCount = classesBySelectedGrade.all().count()  

      classOptionDict = {}  

      for i in range(classOptionCount): 
       classOptionDict["option " + str(i + 1)] = classesBySelectedGrade  

    return render(request, 'select-classes.html', {'classesOptions': classOptionDict}) 

上記のビューの目標:

  1. は時間によってソートされた「コース」のセットを取ることです。
  2. 私のテンプレートにこの辞書を渡し辞書
  3. に各コピーを追加
  4. )(courses.countとしてn番目の何倍ものコースのセットのコピーを作成します。

ここに渡されたデータです。

{ 
    'classesOptions': { 
     'option 1': < QuerySet[ < courseBlock: Course Block: Some Course Block 1 - Start: 07: 00: 00, Endtime: 08: 00: 00: > , < courseBlock: Course Block: Some Course Block 2 - Start: 07: 00: 00, Endtime: 08: 00: 00: > ] > , 
     'option 2': < QuerySet[ < courseBlock: Course Block: Some Course Block 1 - Start: 07: 00: 00, Endtime: 08: 00: 00: > , < courseBlock: Course Block: Some Course Block 2 - Start: 07: 00: 00, Endtime: 08: 00: 00: > ] > 
    } 
} 

私のテンプレートでは私の現在の目標:

  1. 辞書に渡された上で値を読み出すために反復します。

ここは私が使用している現在のループです。

{% for classesOption in classesOptions %} 

    <p> 
     {{ classesOption }} 

     {% for classes in classesOption %} 

      {{ classes }} 

     {% endfor %} 

    </p> 

{% endfor %} 

これは私の出力です。

option 2 o p t i o n 2 
option 1 o p t i o n 1 

上記の出力は、私がテストしている特定のデータで予想されます。 これは、このテストケースでは2つのコピーが必要です。 Pythonで辞書上

class Course(models.Model): 
    title = models.CharField(max_length=200) 
    limit = models.IntegerField(default=10) 
    description = models.TextField(max_length=800) 
    location = models.CharField(max_length=200, default="") 
    teachers = models.TextField(max_length=800, default="") 

class startEndTime(models.Model): 
    endTime = models.TimeField() 
    startTime = models.TimeField() 

class courseBlock(models.Model): 
    course = models.ManyToManyField(Course, related_name='course_in_block') 
    grades = models.ManyToManyField(Grade, related_name='name_in_block') 
    title = models.CharField(max_length=100) 
    time = models.ForeignKey(startEndTime, on_delete=models.CASCADE) 

答えて

1

反復処理(および拡張、Djangoのテンプレート言語によって)キー、ないを反復します:こちらの詳細については、コンテキスト

は私のモデルがあります。次に、文字列であるキーを反復処理しています。文字列を反復すると、個々の文字が返されます。

この場合、キーを印刷して値を反復処理したいと思うようです。 dict.itemsメソッドを使用すると、キーと値を同時に繰り返し処理できます。

{% for option, classes in classesOptions.items %} 
    <p> 
     {{ option }} 
     {% for class in classes %} 
      {{ class }} 
     {% endfor %} 
    </p> 
{% endfor %} 
関連する問題