我正在尝试在django中声明一个数组,但是我还需要一个列,因为在我的情况下,数组位置[0] [0]应该为空以便更好地显示表格,但是当我在视图中声明数组时
Matrice = [[0 for i in range (len (evaluators) +1)] for j in range (len (candidates))]
我刷新页面时收到错误:
需要2个值来解包for循环;得到3。
问题在于“len(评估者)+1”,因为当我拍摄+1时,它的效果非常好。
为什么我无法以这种方式声明数组?在shell(python3 mana.py shell)中,这没有问题......
views.py
from django.shortcuts import render, get_object_or_404
from .models import Candidate, Criterion, Evaluation
from django import forms
from .forms import CandForm
from .forms import EvalForm
from .forms import TestForm
from django.shortcuts import redirect
from django.db import IntegrityError
def canditate_list(request):
candidates = Candidate.objects.all()
eva = Evaluation.objects.all()
eval_cand_list = [] #aqui guarda uma lista com os FK candidates convertidos p/ str
var = 0
var2 = {'v1':2}
context = {
'candidates': candidates,
'eva': eva,
'var': var,
'var2':var2
}
return render(request, 'app/candidate_list.html',context)
def candidate_detail(request, pk):
candidate = get_object_or_404(Candidate, pk=pk)
c_name = candidate.name #pega o nome (string) do candidato
c1 = Evaluation.objects.all() #guarda tds Evaluation na variavel
scores = [] #declara a array que vai receber as notas
for c in c1:
cand = str(c.candidate) #guarda o nome do candidato do Evaluation atual
if cand == c_name: #confere se o Evaluation atual corresponde ao candidate atual(pk)
scores += [c.score]
soma = 0 #variavel que guardara a soma declarada
for s in scores:
soma += s #faz a soma dos scores
average = 0
if len(scores) > 0:
average = soma/len(scores) #tira a média
context = {
'candidate': candidate,
'average': average,
}
return render(request, 'app/candidate_detail.html', context)
"""
def evaluation(request):
list_evaluation = Evaluation.objects.all()
form2 = EvalForm()
cont = 0
if request.method == "POST":
form2 = EvalForm(request.POST)
if form2.is_valid():
for ev in list_evaluation:
cont += 1
"""
def evaluation(request):
# form2 initialization
list_evaluation = Evaluation.objects.all()
form2 = EvalForm()
marker = False
if request.method == "POST":
form2 = EvalForm(request.POST)
if form2.is_valid() == True:
for e in list_evaluation:
if e.appraiser == form2.cleaned_data['appraiser'] and e.candidate == form2.cleaned_data['candidate']:
marker = True
break
if marker == False:
post = form2.save(commit=False)
post.save()
return redirect('canditate_list')
else:
form2 = EvalForm()
error = 'Você já valiou esse candidato'
return render(request, 'app/evaluation.html', {'criterions': form2,'error':error})
else:
form2 = EvalForm()
return render(request, 'app/evaluation.html', {'criterions': form2,})
def register(request):
list_evaluation = Evaluation.objects.all()
if request.method == "POST":
form = CandForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.save()
return redirect('candidate_detail', pk=post.pk)
else:
form = CandForm()
return render(request, 'app/register.html', {'form': form})
def grid(request):
evaluation = Evaluation.objects.all() #queryset com tds os obj avaliação
cont = 0
evaluators = [] #lista que guarda os avaliadores sem repeti-los
for evaluator in evaluation:
cont = 0
for e in evaluators:
if e != evaluator.appraiser:
cont += 1
if cont == len(evaluators):
evaluators += [evaluator.appraiser]
cont = 0
candidates = [] #lista que guarda os avaliador sem repeti-los
for cand in evaluation:
cont = 0
for c in candidates:
if c != cand.candidate:
cont += 1
if cont == len(candidates):
candidates += [cand.candidate]
colunas = len(evaluators)+1
# Numero de colunas Numero de linhas
matrice = [[0 for i in range(len(evaluators)+1)] for j in range(len(candidates))]
cont = 0
context = { #aqui eh o nome que as variaveis terao la no template
'evaluators':evaluators,
'evaluation':evaluation,
'candidates':candidates,
'cont':cont,
'matrice':matrice,
}
return render(request, 'app/grade.html', context)
模板
</!DOCTYPE html>
<html>
<head>
<title></title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<p>{{ evaluators }}</p>
<p>{{ candidates }}</p>
<p>{{ matrice }}</p>
{% for m,n in matrice %}
<p>{{m}},{{n}}</p>
{%endfor%}
</body>
</html>
答案 0 :(得分:1)
你需要做这样的事情
{% for nodes in matrices %}
<p>
{% for node in nodes %}
{{node}},
{% endfor %}
</p>
{% endfor %}