Я получаю ошибку 404, когда передаю в качестве параметра пути int, который является внешним ключом.

Вот url, который я пытаюсь использовать:

http://localhost:8000/blog/categoria/1/

Внешним ключом является categoria_id, который происходит из отношения многие ко многим Post и Categoria.

Я использую Sqlite3.

Этот файл - models.py

from django.db import models
from django.contrib.auth.models import User


class Categoria(models.Model):
    nombre=models.CharField(max_length=50)
    created=models.DateTimeField(auto_now_add=True)
    updated=models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name='categoria'
        verbose_name_plural='categorias'
    
    def __str__(self):
        return self.nombre


class Post(models.Model):
    titulo=models.CharField(max_length=50)
    contenido=models.CharField(max_length=50)
    imagen=models.ImageField(upload_to='blog', null=True, blank=True)
    autor=models.ForeignKey(User, on_delete=models.CASCADE)
    categorias=models.ManyToManyField(Categoria)
   

    created=models.DateTimeField(auto_now_add=True)
    updated=models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name='post'
        verbose_name_plural='posts'
    
    def __str__(self):
        return self.titulo

Этот файл - views.py:

from django.shortcuts import render
from blog.models import Post, Categoria




def blog(request):

    posts=Post.objects.all()
    return render(request, "blog/blog.html",{"posts":posts})

def categoria(request, categoria_id):

    categoria=Categoria.objects.get(id=categoria_id)
    posts=Post.objects.filter(categorias=categoria)
    return render(request, "blog/categoria.html",{'categoria': categoria, "posts":posts })

Этот файл - urls.py

from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    
    path('', views.blog, name='Blog'),
    path('categoria/<int:categoria_id>/', views.categoria, name="categoria")
    

]

Параметры обычно выглядят примерно так: https://www.google.com/search?q=java.net.Socken%3A+Socket&rlz=1C1C&oq=java.net. и т.д.

Обратите внимание, что в первом случае стоит символ ?, а затем & ...

Каждый параметр имеет имя и значение. URL http://localhost:8000/blog/categoria/1/ вызывает страницу index.html в папке на categoria/1/ Эта страница должна получить параметр вида categoria/1/index.html?me=joe&key=23423423

Я изменил базу данных на postgresql и добавил / перед categoria в файле urls.py. На данный момент все работает. Это странно, потому что я уже делал эти изменения раньше, и они не работали.

Несмотря на это, я буду благодарен за любое предложение. Спасибо.

Этот файл - urls.py после изменения:

from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    
    path('', views.blog, name='Blog'),
    path('/categoria/<int:categoria_id>/', views.categoria, name='categoria'),
    

]

Вернуться на верх