簡體   English   中英

NoReverseMatch在“ a href” HTML鏈接中

[英]NoReverseMatch in 'a href' HTML link

我試圖建立一個鏈接,重定向到我的django應用程序中的另一個頁面,我有一個視圖,我有url和我有模板,在我眼中一切正常,但是當我嘗試'href'頁面時做鏈接我得到以下錯誤:

找不到帶有參數'()'和關鍵字參數'{'pk':''}'的'views.candidate_detail'。 嘗試了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>

您應該遍歷candidates QuerySet而不是lista2列表。 然后,您可以像這樣:

{% for candidate in candidates %}
    <p class="tr">
        <a href="{% url 'candidate_detail' candidate.pk %}">{{ candidate }}</a>
    </p>
{% endfor %}

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>

在Django中,當使用url引用視圖時,您需要使用在urls.py為其定義的name屬性。

OP中的屏幕截圖:文件 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM