Django动态传参报错:Reverse for 'room' not found 求助
Django动态URL反向解析报错:Reverse for 'room' not found
问题描述
我是Django初学者,跟着YouTube教程学习时遇到问题。尝试动态传递URL时出现报错:
Reverse for 'room' not found. 'room' is not a valid view function or pattern name.
我严格按教程步骤操作,搜了几小时没找到解决办法,相关代码如下:
home.html
{% extends "main.html" %} {% block content %} <h1>Home Template</h1> <div> <div> {% for room in rooms %} <div> <h3>{{ room.id }} -- <a href="{% url 'room' room.id %}">{{ room.name }}</h3></a> </div> {% endfor %} </div> </div> {% endblock %}
room.html
{% extends 'main.html' %} {% block content %} <h1>Room Page </h1> <h1>{{ room_r.name }}</h1> {% endblock content %}
views.py
from django.shortcuts import render from django.http import HttpResponse # Create your views here. rooms = [ {'id': 1, 'name': 'lets learn python!'}, {'id': 2, 'name': 'Desgin with me'}, {'id': 3, 'name': 'Frontend developer'}, ] def home(request): context = {'rooms': rooms} return render(request, 'base/home.html', context) def room(request, pk): room = None for i in rooms: if i['id'] == int(pk): room = i context = {'room_r': room} return render(request, 'base/room.html',context)
错误的urls.py(你提供的内容)
from django.shortcuts import render from django.http import HttpResponse # Create your views here. rooms = [ {'id': 1, 'name': 'lets learn python!'}, {'id': 2, 'name': 'Desgin with me'}, {'id': 3, 'name': 'Frontend developer'}, ] def home(request): context = {'rooms': rooms} return render(request, 'base/home.html', context) def room(request, pk): room = None for i in rooms: if i['id'] == int(pk): room = i context = {'room_r': room} return render(request, 'base/room.html',context)
错误原因及修复方案
核心问题:urls.py完全配置错误
你提供的urls.py里没有定义任何URL路由规则,反而复制了views.py的代码。Django需要通过urls.py里的urlpatterns映射URL到视图函数,并给路由命名,模板中的{% url 'room' room.id %}才能找到对应的路由。正确的urls.py配置
替换你的urls.py为以下内容:
from django.urls import path from . import views urlpatterns = [ path('', views.home, name='home'), path('room/<int:pk>/', views.room, name='room'), # 必须设置name='room',与模板中的名称一致 ]
- 额外修复:HTML标签闭合问题
home.html中<a>标签的位置错误,导致HTML结构无效,调整为:
<h3>{{ room.id }} -- <a href="{% url 'room' room.id %}">{{ room.name }}</a></h3>
- 验证
重启Django开发服务器,访问首页后点击房间链接,应该能正常跳转至room页面。
内容的提问来源于stack exchange,提问作者Mohammad Hawa
相关产品推荐
相关产品推荐

