You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

错误原因及修复方案

  1. 核心问题:urls.py完全配置错误
    你提供的urls.py里没有定义任何URL路由规则,反而复制了views.py的代码。Django需要通过urls.py里的urlpatterns映射URL到视图函数,并给路由命名,模板中的{% url 'room' room.id %}才能找到对应的路由。

  2. 正确的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',与模板中的名称一致
]
  1. 额外修复:HTML标签闭合问题
    home.html中<a>标签的位置错误,导致HTML结构无效,调整为:
<h3>{{ room.id }} -- <a href="{% url 'room' room.id %}">{{ room.name }}</a></h3>
  1. 验证
    重启Django开发服务器,访问首页后点击房间链接,应该能正常跳转至room页面。

内容的提问来源于stack exchange,提问作者Mohammad Hawa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:30:51