django 未找到参数为“(1,)”的“produto”的NoReverseMatch at / Reverse,已尝试1个模式:['produto/〈int:pk\\Z']

lymgl2op  于 2023-03-24  发布在  Go
关注(0)|答案(2)|浏览(131)

我正在学习Django初级课程,但在修复视图和产品链接时遇到问题

NoReverseMatch at / Reverse for 'produto' with arguments '(1,)' not found. 1 pattern(s) tried: ['produto/<int:pk\\Z']

我真的不知道该怎么解决这个问题。
索引文件:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Django 1 - Index</title>
</head>
<body>
<h2>{{curso}}</h2>
<h1>index</h1>
    <table>
        <thead>
            <tr>
                <th>Produto</th>
                <th>Preço</th>
            </tr>
        </thead>
        <tbody>
            {% for produto in produtos %}
                <tr>
                    <td><a href="{% url 'produto' produto.id %}">{{produto.nome}}</a></td>
                    <td>{{produto.preco}}</td>
                </tr>
            {% endfor %}
        </tbody>
    </table>
</body>
</html>

查看:

from django.shortcuts import render
from .models import Produto
def index(request):
    produtos = Produto.objects.all()
    context = {
        'curso': 'Programação web com django',
        'produtos': produtos
    }
    return render(request, 'index.html', context)
 
def contato(request):
    return render(request, 'contato.html')
 
def produto(request, pk):
    prod = Produto.objects.get(id=pk)
 
    context = {
        'produto': prod
    }
    return render(request, 'produto.html')

produto.html文件:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Produto</title>
</head>
<body>
    <h1>Produto</h1>
     <table>
        <thead>
            <tr>
                <th>Produto</th>
                <th>Preço</th>
                <th>Estoque</th>
            </tr>
        </thead>
        <tbody>
                <tr>
                    <td><a href="{% url 'index' %}">{{produto.nome}}</a></td>
                    <td>{{produto.preco}}</td>
                    <td>{{produto.estoque}}</td>
                </tr>
        </tbody>
    </table>
</body>
</html>

错误信息:

我已经尝试将pk更改为id,但没有解决。

z31licg0

z31licg01#

from django.urls import path
from .views import index, contato, produto

urlpatterns = [
    path('', index, name='index'),
    path('contato/', contato, name='contato'),
    path('produto/<int:pk>/', produto, name='produto'),
]

这可以帮助你,只需要关闭urls.py中的尖括号。

bxgwgixi

bxgwgixi2#

您需要更改索引中的标记,它应该是:

<a href="{% url 'produto' produto.pk %}">

另外,请确保您的URL是正确的,就像这样:

from django.urls import path
from .views import index, contato, produto

app_name = 'djangoappname'

urlpatterns = [
    path('', index, name='index'),
    path('contato/', contato, name='contato'),
    path('produto/<int:pk>/', produto, name='produto'),
]

相关问题