Django开发中如何将index视图的link上下文传递给其他视图函数
Django上下文参数传递实现方案
前置修正:修复现有代码错误
你当前index视图的context赋值存在逻辑错误,将查询集变量写成了固定字符串,会导致模板无法遍历数据,先修正:
# views.py index视图修正后 def index(request): listing = fields.objects.all() context ={'listing': listing} return render(request,'index.html',context)
步骤1:配置bypass_link路由
我们优先采用传递数据ID的方式实现参数传递,避免直接传递链接出现特殊字符截断、非法参数等问题,修改urls.py:
urlpatterns = [ path('admin/', admin.site.urls), path('',index,name="index"), # 新增路由,接收fields表的记录ID作为参数 path('bypass/<int:field_id>/', bypass_link, name="bypass_link"), ]
步骤2:完善bypass_link视图逻辑
在视图中接收路由传递的ID,查询对应链接后执行你的自动化操作:
from django.shortcuts import get_object_or_404, redirect from .models import fields def bypass_link(request, field_id): # 校验ID合法性,获取对应link field_item = get_object_or_404(fields, id=field_id) target_link = field_item.link # 此处写入你的selenium自动化操作代码 # 自动化执行完成后如果需要跳转到原链接,添加下面的重定向逻辑 return redirect(target_link)
步骤3:调整模板跳转链接
修正你模板中url标签的语法错误(标签内不能有多余空格),传入ID参数:
{% for i in listing %} <tr> <td data-label="name">{{ i.name }}</td> <td data-label="Quote"> <button> <a href ="{% url 'bypass_link' field_id=i.id %}" target="_blank">{{ i.link }}</a> </button> </td> <tr> {% endfor %}
补充说明
如果确实需要直接传递链接参数,可将路由改为path('bypass/', bypass_link, name="bypass_link"),模板中以GET参数形式传递<a href ="{% url 'bypass_link' %}?link={{ i.link|urlencode }}",视图中通过request.GET.get('link')获取参数,但该方式容易出现参数被截断、注入风险,不推荐使用。
内容的提问来源于stack exchange,提问作者Rikky Bhai
相关产品推荐
相关产品推荐

