Django站点点击book:genres链接报错:Reverse for 'genre'未找到
问题修复方案
核心错误分析
错误Reverse for 'genre' with arguments '('',)' not found是因为模板引用了不存在的变量,导致URL反向解析时参数为空,同时还有两处代码逻辑错误需要修正。
1. 模板变量引用错误(直接触发当前报错)
在genres.html的循环中,你用了genre.id,但循环变量是i,此时模板上下文里并没有genre变量(该变量仅在单分类页面genre.html中存在),所以传递了空值给URL解析器。同时a标签的闭合位置也不符合HTML规范。
修复后的genres.html代码:
{% extends 'book/base.html' %} {% block content %} <p>Genres</p> <ul> {% for i in genres %} <li> <a href="{% url 'book:genre' i.id %}">{{ i }}</a> </li> {% empty %} <li>No Genres available.</li> {% endfor %} </ul> {% endblock content %}
2. 视图中关联模型调用错误
在views.py的genre函数里,你写了genre.entry_set,但你的关联模型是Title而非Entry,所以应该调用title_set来获取分类下的书籍标题。
修复后的views.py中genre函数:
def genre(request, genre_id): genre = Genre.objects.get(id=genre_id) titles = genre.title_set.order_by('-date_added') context = {'genre': genre, 'titles':titles} return render(request, 'book/genre.html', context)
3. URL路径格式错误
urls.py中的路径'genres/<int:genre_id>'是HTML转义后的字符串,实际应使用Django标准路径语法<int:genre_id>,同时建议添加末尾斜杠以符合Django的URL规范。
修复后的urls.py对应行:
path('genres/<int:genre_id>/', views.genre, name='genre'),
完成以上三处修复后,点击分类链接即可正常跳转到对应分类的书籍列表页面。
内容的提问来源于stack exchange,提问作者mangaka
相关产品推荐
相关产品推荐

