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

如何通过request.resolver_match.kwargs从Django Admin URL获取模型名?

获取Django Admin URL中的模型名

我来帮你解决这个Django Admin的URL参数问题~

首先,先明确Django Admin默认的URL规则:对于像http://127.0.0.1:8000/admin/foo/bar/这样的路径,foo是app标签,bar是模型名(model_name),对应的是该模型的列表视图(changelist)。按照常规配置,request.resolver_match.kwargs里应该包含app_label和model_name这两个键,用来分别获取foo和bar。

你提到model_name返回None,可能需要先排查几个点:

  • 有没有自定义过AdminSite或者修改过Admin的URL模式?如果是自定义配置,可能会改变默认的kwargs键名。
  • 你是在哪个环节获取这个值的?比如在中间件中,是否在URL解析完成前就尝试获取了?
  • 可以先打印request.resolver_match的完整信息来排查:
    print(request.resolver_match.__dict__)
    
    看看里面的kwargs字段到底包含哪些键,这样能快速定位问题所在。

如果确实无法通过kwargs直接获取,除了你用的request.resolver_match.url_name.split('_')[1]方法,还有几个更直接的替代方案:

  • 如果你是在ModelAdmin的自定义方法或Admin模板中,可以直接从模型的元数据获取:
    # 在ModelAdmin类的方法里
    model_name = self.model._meta.model_name
    
  • 通过view_name拆分:request.resolver_match.view_name的格式一般是app_label_model_name_changelist,拆分后也能拿到模型名:
    view_name = request.resolver_match.view_name
    model_name = view_name.split('_')[1]
    

总的来说,优先排查model_name为None的原因(大概率是URL配置或获取时机的问题),如果实在绕不开,拆分url_name或view_name是简单可靠的替代方法,而在Admin内部逻辑里直接访问模型元数据则是最直接的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:09:25