我正在尝试迭代在模板中作为上下文变量传递的字典的键。但它只是没有发生。 当我在模板中放置{{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">
答案 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 %}