据我所知,尽管已经全部到位,但无法迭代模板中的字典上下文变量?

时间:2015-11-24 06:54:19

标签: python django dictionary

我正在尝试迭代在模板中作为上下文变量传递的字典的键。但它只是没有发生。 当我在模板中放置{{key}}时,我得到与该键对应的值,但是无法迭代。

logic.py

global table
table = {}

for i in range(9):
   for j in range(9):
       key = 'i'
       key = key + str(i) + str(j)
       table[key] = 1

view.py

from django.shortcuts import render
from .formss import SudokuForm, RealSudoku
from .logic import table
# Create your views here.

def sudokuf(request):
    title = "Sudoku Puzzle"

    if request.method == 'POST' :
       print(request.POST)
return render (request,"sudoku.html",table)

sudoku.html

<form method="POST" action=""> {% csrf_token %}

    {% for key,value in table.items %}
        {{ key }}:{{ values }}
    {% endfor %}

    {{ i04 }} # If I do this I get the value table['i04'] but not in the above  for loop

    <input type="submit" align="centre" value="Solve">

2 个答案:

答案 0 :(得分:2)

render的第三个参数是一个“上下文”,一个字典,其键可以作为名称用于HTML。您将table对象作为上下文传递,因此其键(如i04)可用作变量...但您的表中没有名为table的键,因此您的HTML无法使用名称table

在view.py中更改此行:

return render (request,"sudoku.html",table)

为:

return render(request, "sudoku.html", {"table": table})

您的HTML中将提供名称table。 (但名称i04)。

您还可以执行以下操作:

import logic
render(request, "sudoku.html", logic)

这将使您的logic模块中定义的所有名称都可用于您的HTML。

如果对此答案有任何不清楚的地方,请发表评论并告诉我,我会尝试进一步解释。

答案 1 :(得分:1)

您可能拥有{{ values }}{{ value }}

所以而不是

{% for key,value in table.items %}
    {{ key }}:{{ values }}
{% endfor %}

尝试...

{% for key,value in table.items %}
    {{ key }}:{{ value }}
{% endfor %}