Django开发:点击按钮后获取并展示特定捐赠数据的问题及报错排查
看起来你遇到的问题主要有两个核心点:一是URL传递的捐赠ID没被视图正确接收,触发了TypeError;二是当前视图还没实现获取单个捐赠详情的逻辑。我来一步步帮你解决:
1. 修复视图函数,获取单个捐赠详情
首先要修改你的视图,让它能接收URL传来的捐赠ID,然后通过ID精准获取对应的捐赠对象。推荐用get_object_or_404,它会自动处理对象不存在的情况,返回404页面,比直接用get()更友好:
from django.shortcuts import render, get_object_or_404 from .models import Donation def acceptdonation(request, donation_id): # 通过ID获取指定捐赠,不存在则返回404页面 donation = get_object_or_404(Donation, id=donation_id) context = {'donation': donation} return render(request, 'acceptdonation.html', context)
2. 配置正确的URL路由
你的URL配置需要把捐赠ID作为参数传递给视图。在对应的urls.py里,修改或添加这条路由:
from django.urls import path from . import views urlpatterns = [ # 保留你已有的其他URL... path('donations/<int:donation_id>/', views.acceptdonation, name='accept_donation'), ]
这里的<int:donation_id>是Django的路径转换器,它会把URL里的数字(比如你请求的59)转换成整数,作为donation_id参数传给视图函数。这就是你之前报错的根源——原来的路由传了参数,但视图没接收,导致参数不匹配。
3. 调整列表页的按钮链接
在available supplies.html的循环里,给"查看详情"按钮设置正确的跳转链接,用Django的url模板标签生成带ID的URL:
{% for donation in donations %} <!-- 这里是你已有的捐赠信息展示代码 --> <button><a href="{% url 'accept_donation' donation.id %}">查看详情</a></button> {% endfor %}
这样用户点击某个捐赠的按钮时,就会跳转到对应的详情页,比如/donations/59/。
4. 在详情页模板展示捐赠信息
最后在acceptdonation.html里,就可以直接通过{{ donation }}调用字段展示详情了:
<div class="donation-detail"> <h2>{{ donation.title }}</h2> <p><strong>联系方式:</strong>{{ donation.phonenumber }}</p> <p><strong>分类:</strong>{{ donation.category }}</p> <p><strong>数量:</strong>{{ donation.quantity }}</p> </div>
这样一套流程走下来,就能实现点击查看单个捐赠详情的功能,同时解决你遇到的TypeError问题啦。
内容的提问来源于stack exchange,提问作者user16421517
相关产品推荐
相关产品推荐

