Я получаю ошибку 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'),
]