如何优化Django自定义模板标签中判断球队颜色的大量elif冗余代码
优化方案:使用字典映射替代多重if-elif判断
这种写法逻辑清晰、扩展性极强,后续新增联赛球队只需要修改配置字典,不用调整业务判断逻辑。
优化后代码
# 提前在模块级别定义球队颜色映射配置,仅在模块加载时生成一次查询关系 COLOR_TEAM_MAPPING = { "green": ["Celtics", "Jazz"], "red": ["Hawks", "Bulls", "Rockets", "Pistons", "Clippers", "Heat", "Trail Blazers", "Raptors"], "grey": ["Nets"], "purple": ["Hornets", "Lakers", "Suns", "Kings"], "#b11226": ["Cavaliers"], "blue": ["Mavericks", "Grizzlies", "76ers"], "yellow": ["Nuggets", "Pacers"], "#1D428A": ["Warriors", "Timberwolves", "Thunder", "Knicks"], "#00471b": ["Bucks"], "gold": ["Pelicans"], "#0077C0": ["Magic"], "silver": ["Spurs", "Wizards"] } # 生成反向查询字典:球队名为key,颜色为value TEAM_COLOR_MAPPING = { team_name: color for color, teams in COLOR_TEAM_MAPPING.items() for team_name in teams } @register.filter(name='teamColor') def teamColor(team): # get方法第二个参数为找不到对应球队时的默认返回值,可自行调整 return TEAM_COLOR_MAPPING.get(team, "black")
后续新增球队/联赛的维护方式
- 已有颜色的新球队:直接在
COLOR_TEAM_MAPPING对应颜色的球队列表中添加球队名即可 - 新增颜色的球队:在
COLOR_TEAM_MAPPING中新增颜色key,搭配对应球队列表即可 - 如果球队量级很大,可以把
COLOR_TEAM_MAPPING单独抽到独立的配置文件中,和业务逻辑完全解耦,修改配置无需触碰过滤器代码。
内容的提问来源于stack exchange,提问作者Ryan Thomas
相关产品推荐
相关产品推荐

