【发布时间】:2017-04-03 07:02:34
【问题描述】:
我正在尝试在我的 django 应用程序中创建一个重定向到另一个页面的链接,我有视图,我有 url,我有模板,在我看来一切都很好,但是当我尝试'href ' 做链接的页面我得到以下错误:
“views.candidate_detail”的反向参数“()”和关键字 未找到参数'{'pk':''}'。尝试了 0 个模式:[]
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()
evaluation = Evaluation.objects.all()
######################## Ponho todos os candidatos e suas respectivas médias em um array em formato dict({Candidato:N})
sum = 0
cont = 1
med = 0
lista = []
for cand in candidates:
cont = 0
sum = 0
med = 0
for e in evaluation:
if cand == e.candidate:
sum += e.score
cont += 1
if cont > 0:
med = sum / cont
data = {str(cand):med} ## a Key recebe o candidato no formato string
lista += [data]
##### passo os dicionários contidos na lista anterior para outra lista convertendo-os em string
lista2 = []
for l in lista:
lista2 += [str(l)]
lista2 = [re.sub(r'[^\w\d.:]+',"",e) for e in lista2]
eval_cand_list = [] #aqui guarda uma lista com os FK candidates convertidos p/ str
context = {
'candidates': candidates,
'evaluation': evaluation,
'lista2':lista2
}
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)
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.canditate_list, name='canditate_list'),
url(r'^candidato/(?P<pk>[0-9]+)/$', views.candidate_detail, name='candidate_detail'),
url(r'^cadastrar/$', views.register, name='register'), # <--! o cadastro fica num link independete
url(r'^grid/$', views.grid, name='grid'),
url(r'^candidato/[0-9]+/avaliacao/$', views.evaluation, name='evaluate'),
]
模板 html:
{% load staticfiles %}
{% load mathfilters %}
<!DOCTYPE html>
<html>
<head>
<title>Lista de candidatos</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link href="https://fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext" rel="stylesheet" type="text/css">
<link href="{% static 'css/app.css' %}" rel="stylesheet">
</head>
<body>
<h1 class="h1t">Lista de Candidatos</h1>
{% for l in lista2 %}
<p class="tr"><a href="{% url 'views.candidate_detail' pk=post.pk %}">{{l}}</a></p>
{% endfor %}
</body>
</html>
【问题讨论】:
-
解决方案在
lista2的值内。显示lista2的值,我们就能回答。 -
这些值取自 QuerySet。它们可以变化,您希望我如何显示“list2”值?你想让我为其中一个发一个吗?
-
是的。只需发布一个,如果这是一个很大的列表。我只是想让模式出现。
-
只是个字符串人,字典转换成字符串
-
这不是很有帮助!您正在迭代此列表,并且希望从每个项目中 get 一个
pk以将其传递给{% url %}标记。在这个列表中的某个地方,有这个pk。对吗?
标签: python html django django-views