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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:45:04