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

如何在Django中为URL参数设置默认值?

在Django中为URL参数定义默认值的方法

针对你的需求,这里提供两种实用的实现方式:

方法一:通过URL配置传递默认参数

修改项目根目录的urls.py,新增一条不带web参数的路径,通过字典传递默认值chemical,同时保留原有的带参数路径:

urlpatterns = [
    path('admin/', admin.site.urls),
    # 匹配不带web参数的/staff路径,传递默认值
    path('staff/', include('staff.urls'), {'web': 'chemical'}),
    # 匹配带web参数的路径
    path('<str:web>/staff/', include('staff.urls')),
]

同时修改views.py中的get_queryset方法,避免直接取self.kwargs['web']引发KeyError,改用get方法获取参数(可额外保留默认值做双重保险):

def get_queryset(self):
    web = self.kwargs.get('web', 'chemical')
    return Staff.objects.filter(websites__path=web)

方法二:结合正则URL与视图默认值

如果想用单条URL规则匹配两种访问场景(带/不带web参数),可以使用re_path定义可选参数:

修改根urls.py:

from django.urls import re_path

urlpatterns = [
    path('admin/', admin.site.urls),
    # 正则匹配可选的web参数,支持两种路径格式
    re_path(r'^(?:(?P<web>[^/]+)/)?staff/', include('staff.urls')),
]

然后在视图的get_queryset中直接设置参数默认值即可:

def get_queryset(self):
    web = self.kwargs.get('web', 'chemical')
    return Staff.objects.filter(websites__path=web)

注意事项

  • 不要直接使用self.kwargs['web'],否则当没有传递参数时会抛出KeyError异常。
  • 使用正则URL时,(?:...)是非捕获组,?标记该组为可选,确保同时匹配带/不带web的路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:50:23