Django设置URL可选month参数默认值时报KeyError如何解决?
错误原因
访问/dividends/路径时,URL没有传递month参数,视图的self.kwargs字典中不存在month键,直接通过self.kwargs['month']取值就会触发KeyError。
修复方案
方案1:直接修改视图取值逻辑(最简单,无需改动URL配置)
将视图中month的取值逻辑改为用dict.get()方法,不存在时默认返回None即可匹配你现有get_month函数的逻辑:
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) divs = Dividends() # 把原来的self.kwargs['month']替换为下面这行 month = self.kwargs.get('month') context['month'] = get_month(month) return context
方案2:优化URL配置,合并重复路径(可选,更简洁)
如果你不想写两条重复的path配置,可以用re_path把month设为可选参数,单条规则覆盖两种访问场景:
from django.urls import re_path urlpatterns = [ ... re_path(r'^dividends/(?:(?P<month>[a-zA-Z]+)/)?$', views.DividendView.as_view(), name='dividendview'), ]
注意事项
你当前的get_month函数在month为空时返回的是数字格式的月份(比如10),但路径传递的是字符串格式的月份缩写(比如Oct),如果业务需要统一格式,可以自行在get_month函数中补充转换逻辑。
内容的提问来源于stack exchange,提问作者bertrussell
相关产品推荐
相关产品推荐

