Django开发NYC Guide点击活动链接报缺少venues参数TypeError
问题修复方案
核心错误原因
activity视图函数定义了多余的venues参数,对应URL路径仅传递borough、activity两个参数,直接触发参数缺失报错activity视图参数顺序和URL路径定义的参数顺序不匹配,会导致取值混乱venue视图缺少URL传递的borough、activity参数- 活动页模板的跳转链接未传递完整路径参数,URL名称调用错误
- 代码存在缩进错误、HTML转义字符替换正常引号的语法问题
修复后的完整代码
1. views.py
from django.shortcuts import render from .boroughs import boroughs def city(request): if request.method == 'GET': return render(request=request, template_name='city.html', context={'boroughs': boroughs.keys()}) def borough(request, borough): if request.method == 'GET': return render(request=request, template_name='borough.html', context={'borough': borough, 'activities': boroughs[borough].keys()}) # 修正参数顺序、删除多余venues参数、修正缩进 def activity(request, borough, activity): if request.method == 'GET': return render(request=request, template_name='activity.html', context={'venues': boroughs[borough][activity].keys(), 'activity': activity, 'borough': borough}) # 补充URL传递的三个参数 def venue(request, borough, activity, venue): if request.method == "GET": return render(request=request, template_name='venue.html', context={'venue': venue, 'activity': activity, 'borough': borough})
2. activity.html模板
<h1>{{ activity | title }}</h1> <ul> {% for venue in venues %} <li> <!-- 传递完整的三个路径参数,调用正确的venue路由名称 --> <a href="{% url 'venue' borough activity venue %}">{{venue|title}}</a> </li> {% endfor %} </ul>
3. venue.html模板(你需要的VENUES PAGE页头直接写在这里即可)
<h1>VENUES PAGE</h1> <h2>{{ venue | title }}</h2> <!-- 后续场所详情可直接在此处开发 -->
4. urls.py(可选优化,统一路径后缀避免重定向问题)
from django.urls import path from nyc import views urlpatterns = [ path('', views.city, name='city'), path('<str:borough>/', views.borough, name='borough'), path('<str:borough>/<str:activity>/', views.activity, name='activity'), path('<str:borough>/<str:activity>/<str:venue>/', views.venue, name='venue') ]
内容的提问来源于stack exchange,提问作者kayla22
相关产品推荐
相关产品推荐

