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

Django详情页模板变量无法显示问题求助

问题

刚开启Django学习之旅,遇到了模板变量无法显示的问题。想要实现首页展示所有建筑的列表链接,点击后进入对应建筑的详情页。

目前首页能正常展示数据库中的所有建筑列表,点击链接可进入详情页,但详情页仅显示静态文本,无法渲染Build模型的变量。测试使用HttpResponse能正确显示对应的build_id,但模板变量始终无输出,请问哪里出错或遗漏了什么?

相关代码

models.py

class Build(models.Model):
    building_name = models.CharField( max_length=50)
    address = models.CharField(max_length = 100)
    #other details 

views.py

from django.shortcuts import render
from django.shortcuts import get_object_or_404
from django.http import HttpResponse

from .models import Build

def home(request):
    builds = Build.objects.all()
    return render(request, 'Home.html', {'builds':builds,})

def building_detail(request,build_id):
    #return HttpResponse(f'<p> building number {build_id}</p>')
    build = get_object_or_404(Build, id=build_id),
    return render(request, 'Building_detail.html', {'build':build,})

urls.py

from django.contrib import admin
from django.urls import path

from Buildings import views

urlpatterns.py = [
    path('admin/', admin.site.urls),
    path('', views.home, name='home'),
    path('buildings/<int:build_id>/', views.building_detail, name= 'building_detail'),
]

Home.html

<p>Home view from template</p>
    <div>
        {% for build in builds %}
            <div class="buildingname">
                <a href="{% url 'building_detail' build.id %}">
                <h3>{{build.building_name|capfirst}}</h3>
                </a>
                </div>
        {% endfor %}
    </div>

Building_detail.html

<div>  
        <h3>{{build.building_name|capfirst}}</h3>
        <p>building view from template is this working</p>
        <h3>does this {{build.building_name|capfirst}} work</h3>
        <p>{{build.address}}
    </div>

问题原因与解决办法

核心错误

views.py中building_detail函数的这一行末尾多了一个逗号:

build = get_object_or_404(Build, id=build_id),

这个逗号会让build变量变成一个元组(包含单个Build对象的元组),而不是预期的Build实例。模板中尝试访问build.building_name时,实际上是在访问元组的属性,元组没有这些属性,因此无法渲染出内容。

修正步骤

  1. 去掉views.py中那行的末尾逗号,修改后代码:
def building_detail(request,build_id):
    #return HttpResponse(f'<p> building number {build_id}</p>')
    build = get_object_or_404(Build, id=build_id)
    return render(request, 'Building_detail.html', {'build':build,})
  1. 同时修正urls.py中的笔误:将urlpatterns.py = [改为urlpatterns = [,否则URL配置会失效:
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home, name='home'),
    path('buildings/<int:build_id>/', views.building_detail, name= 'building_detail'),
]

修改完成后,重新运行服务,详情页的模板变量就能正常渲染了。

内容的提问来源于stack exchange,提问作者Matt Body

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:25:35