Пользовательский шаблонный тег Django сортирует длинный список 'elif'
У меня есть тег пользовательского шаблона Django, который изменяет цвет шрифта в зависимости от введенного значения.
Все работает нормально, но мне интересно, есть ли более чистый способ написать это вместо того, чтобы делать все эти утверждения elif. Показана даже не половина команд, есть еще 3 лиги команд, которые будут включены в этот тег.
Огромное спасибо за любую помощь, которую вы можете предложить.
@register.filter(name='teamColor')
def teamColor(team):
if team == "Celtics" or team == "Jazz":
return "green"
elif (team == "Hawks" or team == "Bulls" or team == "Rockets"
or team == "Pistons" or team == "Clippers" or team == "Heat" or
team == "Trail Blazers" or team == "Raptors"):
return "red"
elif team == "Nets":
return "grey"
elif (team == "Hornets" or team == "Lakers" or team == "Suns" or
team == "Kings"):
return "purple"
elif team == "Cavaliers":
return "#b11226"
elif team == "Mavericks" or team == "Grizzlies" or team == "76ers":
return "blue"
elif team == "Nuggets" or team == "Pacers":
return "yellow"
elif (team == "Warriors" or team == "Timberwolves" or team == "Thunder" or
team == "Knicks"):
return "#1D428A"
elif team == "Bucks":
return "#00471b"
elif team == "Pelicans":
return "gold"
elif team == "Magic":
return "#0077C0"
elif team == "Spurs" or team == "Wizards":
return "silver"
Я рекомендую вам перечислить все ваши команды с их желаемыми цветами в файле .json
, импортировать его в ваши представления и попытаться поймать цвет следующим методом.
import json
def getTeamColor(team):
with open('file.json') as file: # file contains teams and colors
team_colors = json.load(file)
for teams in tuple(team_colors.keys()):
if team in teams:
return team_colors[teams]
А файл JSON должен иметь следующую структуру.
{
"('Celtics', 'Jazz')": "green",
"('Hawks', 'Bulls', 'Rockets')": "red",
"('Nets',)": "grey",
...
}
Просто поместите все в словарь (таблицу поиска).
@register.filter(name='team_color')
def team_color(team):
team_colors = {
'Celtics': 'green',
'Jazz': 'green',
'Hawks': 'red',
'Bulls': 'red',
'Rockets': 'red',
'Pistons': 'red',
'Clippers': 'red',
'Heat': 'red',
# ... etc ..
}
return team_colors[team]
Это очень быстро и понятно. Вы также можете использовать return team_colors.get(team, default='no_color')
вместо этого, чтобы вернуть цвет по умолчанию, если команда не существует.