Tenho problemas com mapeamento de urls no django. Não consigo exibir conteúdo do banco de dados

Galera, eu sou noob em desenvolvimento web, mas estou querendo ingressar na área. Por isso comprei esse livro:

image

E tudo certo, mas quando cheguei na parte de mapeamento de urls e leitura de itens no banco de dados, retorna esse erro … Ele parece receber os dados relacionados, mas não modula na urls:

  File "/home/jacksupremo/Documentos/estudoPython/web_estudo_Python/siteProjeto/lib/python3.10/site-packages/django/urls/resolvers.py", line 828, in _reverse_with_prefix
    raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'detalhes_produto' with arguments '('chainsaw-man-volume',)' not found. 1 pattern(s) tried: ['produto/\\ (?P<id>[0-9]+)/(?P<slug_produto>[^/]+)\\Z']

Eu não entendi o motivo de erro, já li o capítulo novamente e não entendo o que devo re-codificar … Alguém pode me ajudar?

Notei na captura à qual publicou outro erro de sintaxe, na linha 23 não é senão e sim elif ou else que queria atribuir…

Foi um deslize meu, o tradutor do google estava ativado quando tirei o print.

Normal :joy:, aqui vai minha opinião, fique a vontade para discordar, mas acho que ao buscar soluções, obterá muito mais resultados se buscar em Inglês mesmo…


Sobre o tópico como está retornando o método get_absolute_url no arquivo models.py?

Como o livro à qual está seguindo está com algumas desatualizações recomendo a leitura auxiliar da documentação! Neste caso segue para definir o método get-absolute-urlModel instance reference | Django documentation | Django

1 curtida

Cara valeu, e sim, manipulei o models.py … Segue como ele tá:

from django.db import models as md
from django.urls import reverse as rv

# Create your models here.

class Categoria(md.Model):
    nome = md.CharField(max_length=200,
        db_index=True)
    
    slug = md.SlugField(max_length=200,
        unique=True,
        db_index=True)

    data_criacao = md.DateTimeField(auto_now_add=True)
    data_ultima_atualizacao = md.DateTimeField(auto_now_add=True)

    class Meta:
        ordering=('nome',)
        verbose_name='categoria'
        verbose_name_plural='categorias'

    def __str__(self):
        return self.nome
    
    def get_absolute_url(self):
        return rv('main:listar_por_categoria', args=[self.slug])

class Produto(md.Model):
    categoria = md.ForeignKey(Categoria,
        related_name='produtos',
        null=True,
        on_delete=md.CASCADE)

    nome = md.CharField(max_length=100,
        db_index=True)
    
    slug = md.SlugField(max_length=100,
        db_index=True)
    
    descricao = md.TextField(blank=True)
    preco = md.DecimalField(max_digits=10,
        decimal_places=2)
    
    disponivel = md.BooleanField(default=True)
    estoque = md.PositiveIntegerField()

    data_criacao = md.DateTimeField(auto_now_add=True)
    data_ultima_atualizacao = md.DateTimeField(auto_now_add=True)

    imagem = md.ImageField(upload_to='imagens-produtos',
        blank=True)
    
    class Meta:
        ordering=('nome',)
        index_together=(('id','slug'),)
    
    def __str__(self):
        return self.nome

    def get_absolute_url(self):
        return rv('main:detalhes_produto', args=[self.slug])

Eu não sei se tem algo de errado … tem?

Como esta definindo os path no arquivo urls.py tens algo próximo do exemplo abaixo?

path('produto/<str:slug_produto>/', views.detalhes_produto, name='detalhes_produto'),

Alem disso tens as migrations devidamente atualizadas?

Mano, no livro, ele diz para criar um arquivo [quote=“null, post:7, topic:49218”]
urls.py [/quote] no aplicativo main, ligar com o do progeto geral.

Então, segue o meu código do urls.py do aplicativo main:

from django.urls import path as pth
from . import views
from django.views.generic import TemplateView as TV

app_name='main'

urlpatterns = [
    pth('', TV.as_view(template_name='index.html')),
    pth('produtos/', views.listar_produtos, 
        name='listar_produtos'),
    pth('produto/<int:id>/<str:slug_produto>', 
        views.detalhes_produto,
        name='detalhes_produto'),
]

Esse é do projeto geral:

from django.contrib import admin
from django.urls import path as pth ,include
from django.views.generic import TemplateView as TV
from main import views as vw
from django.conf import settings as stt
from django.conf.urls.static import static as stc

urlpatterns = [
    pth('admin/', admin.site.urls),
    pth('ajuda/', TV.as_view(template_name='ajuda.html')),
    pth('fale-conosco/', vw.ViwesFaleConosco.as_view(), name='fale_conosco'),
    pth('', include('main.urls',namespace='main')),
] + stc(stt.MEDIA_URL, document_root=stt.MEDIA_ROOT)

Talvez agora sim seja outro erro de sintaxe note na path ‘fale-conosco/’, esta chamando Viwes, altere para Views deixando como a linha como abaixo…

path('fale-conosco/', vw.ViewFaleConosco.as_view(), name="fale_conosco"),

Outra possível falha seja no arquivo urls.py dentro do main, removendo o <int:id>

path('produto/<str:slug_produto>/', views.detalhes_produto, name='detalhes_produto'),

Mano … Arrumei como me pediu e agora o resto buga kkkkkkkk

Tens acesso ao material de apoio que acompanha este livro, caso não segue abaixo, somente acessar e baixar todo o conteúdo abordado, o qual poderá verificar algo o qual está errando, e então progredir…

Valeu, mas eu acabei de copiar kkkk e dá no mesmo erro … Você sabe outra maneira de exibir os itens do banco de dados numa página?

Faz um teste em um ambiente virtual utilizando-se da versão 3.2.10, do django, pois realizei um teste com o material de apoio e não apresenta nenhum erro…

1 curtida