Python NoReverseMatch in';a href';HTML链接

Python NoReverseMatch in';a href';HTML链接,python,html,django,django-views,Python,Html,Django,Django Views,我试图在django应用程序中创建一个重定向到另一个页面的链接,我有视图,我有url,我有模板,在我看来一切正常,但当我尝试“href”页面进行链接时,我得到以下错误: 带参数“()”和关键字的“views.candidate_detail”则相反 找不到参数“{pk”:“}”。已尝试0个模式:[] 视图.py from django.shortcuts import render, get_object_or_404 from .models import Candidate, Criteri

我试图在django应用程序中创建一个重定向到另一个页面的链接,我有视图,我有url,我有模板,在我看来一切正常,但当我尝试“href”页面进行链接时,我得到以下错误:

带参数“()”和关键字的“views.candidate_detail”则相反 找不到参数“{pk”:“}”。已尝试0个模式:[]

视图.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)
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'), 

]
url.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)
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'), 

]
从django.conf.url导入url
从…起导入视图
URL模式=[
url(r'^$',views.canditate_list,name='canditate_list'),
url(r“^candidateo/(?P[0-9]+)/$”,views.candidate\u detail,name='candidate\u detail'),

url(r“^cadastar/$”,views.register,name='register'),#替换
href
,如下所示:

{% 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 'candidate_detail' post.pk %}">{{l}}</a></p>
    {% endfor %}

</body>
</html>
{%load staticfiles%}
{%load mathfilters%}
候选名单
候选名单
{lista2%中l的%s}

{%endfor%}
在Django中,当使用
url
引用视图时,需要使用在
url.py中为其定义的
name
属性


OP:file的屏幕截图

您应该迭代
候选对象
查询集,而不是
列表A2
列表。然后您可以这样做:

{% for candidate in candidates %}
    <p class="tr">
        <a href="{% url 'candidate_detail' candidate.pk %}">{{ candidate }}</a>
    </p>
{% endfor %}
{候选人中候选人的百分比%}

{%endfor%}
感谢您的关注,但它不起作用:与参数“(”)”和关键字参数“{}”相反的“候选详细信息”。尝试了1种模式:[“Candidateo/(?P[0-9]+)/$”]@DouglasdaSilva.这是因为未定义
post.pk
。您正在迭代
lista2
lista2
中的每个元素是否都有
pk
属性?@sreetamd当附加screeshot时,解决方案位于
lista2
的值内。显示
lista2
的值,我们就可以回答。这些值取自QuerySet。它们可能会有所不同,您希望我如何显示“list2”值?您希望我为其中一个发布一个值吗?是的。只要发布一个,如果这是一个大列表。我只想显示模式。只是一个字符串管理器,一个字典转换为一个字符串,这不是很有帮助!您正在迭代此列表,并且希望从每个项目获取
pk
,并将其传递给
{%url%}
tag。在这个列表的某个地方有一个
pk
。对吗?但我需要显示候选人和你的平均值,出于这个原因,我创建了一个循环,将他们放在字典中,并将其转换为字符串以便更好地查看…有没有办法使用字符串列表进行重定向?对不起,我错了,它可以工作…但为什么不能我是通过字符串列表来实现的,因为字符串不是可以调用属性的
Model
对象(
list\u element.id
)。该字符串没有属性
id
。它只是一个普通字符串。我将更新我的答案以满足您的需要。虽然,它不会很优雅。嗯..明白了,非常感谢您的关注..因此,我需要选择查询集中的候选人(模特)把他们笔记的suuta平均值放在另一个模型中,你知道有没有办法在许多不同的模型中具有相同值的公共属性?候选平均值放在评估模型中…或者以某种方式访问其他模型中的属性…(或者仅仅为此创建另一个问题更好?)再次感谢!最好为此创建另一个问题!可能会对您有所帮助。如果上述任何答案有助于您将其标记为已接受。