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

如何在Django中通过URL传递模型选项的静态字符串参数?(Django 2.0)

如何在Django 2.0中通过URL传递模型选项的静态字符串参数

没问题,结合你的Visitor模型配置,我们可以通过以下步骤实现传递'P'或'E'这类合法参数的需求,同时保证URL的健壮性:

1. 配置带参数校验的URL路由

首先,为了避免用户传入无效参数(比如随机字符串),我们应该在URL层面就限制只能匹配'P'或'E'。Django 2.0中可以用re_path(对应旧版的url函数)来实现正则匹配:

from django.urls import re_path
from . import views

urlpatterns = [
    # 正则捕获只能是P或E的visitor_type参数
    re_path(r'^(?P<visitor_type>[PE])/visit_information/$', views.visit_information, name='visit-info'),
]

如果你坚持要用path而非正则,也可以自定义路径转换器,但上面的正则方式更直接高效,能提前拦截不符合要求的请求。

2. 在视图中接收并处理参数

接下来在视图函数中接收这个参数,同时最好做一次双重校验(即使URL过滤了,也能避免其他场景下的无效参数),然后用它来处理模型数据:

from django.shortcuts import render
from .models import Visitor

def visit_information(request, visitor_type):
    # 从模型的TYPE_CHOICES中获取合法类型集合
    valid_types = [choice[0] for choice in Visitor.TYPE_CHOICES]
    if visitor_type not in valid_types:
        # 返回404错误页面
        return render(request, 'errors/404.html', status=404)
    
    # 过滤对应类型的访客记录
    filtered_visitors = Visitor.objects.filter(type=visitor_type)
    
    # 把数据传递到模板渲染,顺便拿到类型的显示名称(比如'Person')
    return render(request, 'visit_information.html', {
        'visitors': filtered_visitors,
        'current_type_label': dict(Visitor.TYPE_CHOICES)[visitor_type]
    })

3. 模板中生成合法链接(可选)

如果需要在模板里生成指向该路由的链接,直接用url模板标签传入合法参数即可:

<div class="nav-links">
    <a href="{% url 'visit-info' visitor_type='P' %}">个人访客信息</a>
    <a href="{% url 'visit-info' visitor_type='E' %}">员工访客信息</a>
</div>

小提示:为什么不用<str:visitor_type>?

如果直接写path('<str:visitor_type>/visit_information/', ...),虽然能接收参数,但无法限制用户输入的内容——比如有人输入/my_app/X/visit_information/,你的视图就会收到无效的X参数,可能导致后续逻辑出错。用正则匹配能让你的接口更健壮,提前拦截无效请求。

内容的提问来源于stack exchange,提问作者Hanny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:14:03