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

Django报get() unexpected keyword argument 'slug'且URL韩文不生效问题

问题根因

两个配置均存在问题,对应报错原因如下:

  • slug:slug返回404:Django内置的slug路径转换器默认仅支持ASCII字符匹配,哪怕模型字段开启了allow_unicode,路由层默认也无法识别韩文字符,导致路由匹配失败返回404。
  • str:slug报参数错误:你在路由中配置了slug路径参数,Django会自动将该参数作为关键字参数传入对应视图的get方法,但你的ReviewListAPI的get方法没有定义接收slug参数的形参,直接触发参数不匹配报错。
解决方案

1. 修复视图层参数接收与业务逻辑

修改views.py中的ReviewListAPI类,新增slug参数接收路由传值,同时补充对应过滤逻辑(你配置带slug的路由目的是筛选对应建筑的评论,因此需要加过滤规则):

from django.shortcuts import get_object_or_404

class ReviewListAPI(APIView):
    # 新增slug形参接收路由参数
    def get(self, request, slug):
        # 先根据slug查询对应建筑,不存在则直接返回404
        target_building = get_object_or_404(BuildingData, slug=slug)
        # 过滤出该建筑关联的所有评论,此处外键字段名请根据你实际的模型定义修改
        queryset = ReviewData.objects.filter(building=target_building)
        serializer = ReviewSerializer(queryset, many=True)
        return Response(serializer.data)

2. 路由层支持韩文字符匹配

两种方案可选:

  • 直接使用<str:slug>:简单粗暴,已经可以满足需求,视图修复后不会再报参数错误,韩文可以正常识别。
  • 自定义Unicode slug转换器(更规范):相比str仅匹配符合slug规则的字符,避免无效路径匹配,配置如下:
    首先在urls.py头部注册自定义转换器:
    from django.urls import register_converter
    
    class UnicodeSlugConverter:
        regex = '[-_\w]+'
        def to_python(self, value):
            return str(value)
        def to_url(self, value):
            return str(value)
    
    register_converter(UnicodeSlugConverter, 'uslug')
    
    之后修改路由规则即可:
    path('api/buildingdata/<uslug:slug>/', ReviewListAPI.as_view())
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:24:03