Я получаю ошибку: everse для 'genre' с аргументами '('',)' не найден. 1 pattern(s) tried: ['genres/(?P<genre_id>[0-9]+)\\Z']

Я пытаюсь запустить сайт Django, но у меня возникает ошибка при нажатии на этот url:

'book:genres'

Вот в чем ошибка: Reverse for 'genre' with arguments '('',)' not found. Проверен 1 шаблон(ы): ['genres/(?P<genre_id>[0-9]+)\Z'] что-то не так с этим урлом:

 <a href="{% url 'book:genre' genre.id %}">

страница моих моделей:


from django.db import models

# Create your models here.
class Genre(models.Model):
    """A Genre of a book"""
   
    text = models.CharField(max_length=20)
    date_added = models.DateTimeField(auto_now=True)
    def __str__(self):
        """return a string representation of the model"""
        return self.text
    

class Title(models.Model):
    """A Title of a book"""
    genre = models.ForeignKey(Genre, on_delete=models.CASCADE)
    text = models.CharField(max_length=20)
    date_added = models.DateTimeField(auto_now=True)
     


    class Meta:
            verbose_name_plural = 'titles'
    def __str__(self):
        """"Return a string rep of model"""
        return f"{self.text[:50]}"
    

мои взгляды:


from django.shortcuts import render

# Create your views here.

from .models import Genre

def index(request):
    """Home page"""
    return render(request, 'book/index.html')


def genres(request):
    genres = Genre.objects.order_by('date_added')
    context = {'genres': genres}
    return render(request, 'book/genres.html', context)

def genre(request, genre_id):
    genre = Genre.objects.get(id=genre_id)
    titles = genre.entry_set.order_by('-date_added')
    context = {'genre': genre, 'titles':titles}
    return render(request, 'book/genre.html', context)

мои урлы:



"""Defines url patterns for book app"""

from django.urls import path

from . import views

app_name = 'book'

urlpatterns = [
    # Home page
    path('', views.index, name = 'index'),
    path('genres/', views.genres, name="genres"),
    path('genres/<int:genre_id>', views.genre, name='genre'),
]


Шаблон genres.html:



{% extends 'book/base.html' %}

{% block content %}

<p>Genres</p>

<ul>
    {% for i in genres %}
    <li>
        <a href="{% url 'book:genre' genre.id %}">
        {{ i }}
    </li>
</a>
    {% empty %}
    <li>No Genres available.</li>
    {% endfor %}
</ul>

пожалуйста, помогите!!!!! Огромное спасибо!!!

{% endblock content %}

попытался использовать объект внешнего ключа для загрузки страницы с жанром и всеми названиями.

Вы используете переменную i в файле genres.html, но тогда genre.id не будет иметь никакого значения. Замените i на genre:

<ul>
    {% for genre in genres %}
    <li>
        <a href="{% url 'book:genre' genre.id %}">{{ genre }}</a>
    </li>
    {% empty %}
    <li>No Genres available.</li>
    {% endfor %}
</ul>

Во-вторых, у вас неправильно обернуты теги. Смотрите мою версию.

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