Django:如何从超链接列表中获取列表项内容并传递到views.py
解决方法
你当前的写法存在三个核心问题:
- a标签的
name属性不会被GET请求自动携带,只有表单内的输入类元素值才会在表单提交时被传递 - urls.py中路径开头不能加斜杠,否则会触发Django的路径匹配异常
- views.py中获取参数的键名存在拼写错误,和html中定义的
pot_address不一致
方法一:直接给a标签拼接GET参数(推荐,改动最小)
直接把地址参数拼在a标签的跳转链接里,不需要额外表单:
修改HTML代码
<ul> {% for item in list_addresses %} <li><a href="{% url 'analytics' %}?pot_address={{ item.post_code }}" >{{ item.post_code }}</a></li> {% endfor %} </ul>
修改urls.py代码
把路径开头的斜杠去掉,Django的path定义不需要前置斜杠:
urlpatterns = [ path('', views.home, name = 'home'), path('analytics/', views.analytics, name = 'analytics'), ]
修改views.py代码
修正拼写错误,同时加默认值避免参数不存在时报错:
def analytics(request): if request.method == 'GET': pot_address = request.GET.get('pot_address', '') # 后续从数据库拉取数据的逻辑
方法二:用表单提交实现(适合需要传递更多参数的场景)
如果后续需要传递多个参数,可以给每个候选地址加单独的表单,用按钮模拟a标签样式:
<ul> {% for item in list_addresses %} <li> <form action="{% url 'analytics' %}" method="GET" style="display:inline;"> <input type="hidden" name="pot_address" value="{{ item.post_code }}"> <button type="submit" style="background:none;border:none;color:blue;text-decoration:underline;cursor:pointer;"> {{ item.post_code }} </button> </form> </li> {% endfor %} </ul>
urls和views的修改规则和方法一完全一致。
内容的提问来源于stack exchange,提问作者FJ123
相关产品推荐
相关产品推荐

