如何向Django URL传递动态值以避免NoReverseMatch错误
Django酒店预订应用NoReverseMatch错误修复
错误详情
NoReverseMatch at /search_results/ Reverse for 'more_info_page' with keyword arguments '{'room_type': 'double', 'check_in_date': '2023-12-07', 'checkout_date': '2023-12-09', 'guests': '1'}' not found. 1 pattern(s) tried: ['more_info_page/(?P<room_type>[^/]+)/(?P<check_in_date>[^/]+)/(?P<check_out_date>[^/]+)/(?P<guests>[^/]+)/\\Z']
问题根源
URL模式定义的参数名是check_out_date(包含下划线),但模板中传递的关键字参数名是checkout_date(缺少下划线),两者不匹配导致反向解析失败。
修复步骤
1. 修正模板中的参数名
将HTML链接代码里的checkout_date参数名改为check_out_date,与URL模式中的参数名保持一致:
<a href="{% url 'more_info_page' room_type=room_type check_in_date=checkin_date check_out_date=checkout_date guests=guests %}" class="btn btn-primary">More Info</a>
2. 确认上下文变量类型(可选验证)
检查视图传递到模板的变量均符合URL的字符串类型要求:
checkin_date和checkout_date是从POST请求直接获取的字符串,无需额外转换guests是POST获取的字符串room_type从available_room_types中获取,为字符串类型
这些变量类型与URL模式中<str:xxx>的定义完全匹配,无需调整。
验证修复
修改后重新运行应用,点击"More Info"链接即可正常跳转到more_info_page视图,反向解析错误将被解决。
内容的提问来源于stack exchange,提问作者johnnyflipper234
相关产品推荐
相关产品推荐

