Задать вопрос
@YuriyCherniy

Как избавиться от глобальной переменно в файле views.py?

Стоит задача получить список городов из API VK по ID страны. Затем необходимо сделать кнопку сортировки городов в алфавитном порядке. Вот как я это реализовал:
def get_cities(request, id):
    global cities_list
    METHOD = 'database.getCities'
    response = requests.get(
        f'{URL}{METHOD}?access_token={TOKEN}&v={VK_API}&country_id={id}'
    )
    content = response.json()
    cities_list = [i['title'] for i in content['response']['items']]
    context = {'cities': cities_list}
    return render(request, 'countries/cities_list.html', context)


def sort_cities(request):
    cities_list.sort(key=lambda x: x[0])
    context = {'cities': cities_list}
    return render(request, 'countries/cities_list.html', context)

Для того, чтобы не обращаться к API за одной и той же информацией в разных функциях сделал переменную cities_list глобальной, что, как мне кажется, не совсем хорошо. Как решить эту задачу без глобальной переменной?
  • Вопрос задан
  • 85 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
@lru_cache
def get_cities(id):
    METHOD = 'database.getCities'
    response = requests.get(
        f'{URL}{METHOD}?access_token={TOKEN}&v={VK_API}&country_id={id}'
    )
    content = response.json()
    return [i['title'] for i in content['response']['items']]


def show_cities(request, id, ordered=False):
    cities_list = get_cities(id)
    if ordered:
        cities_list = sorted(cities_list, key=lambda x: x[0])
    return render(request, 'countries/cities_list.html', {'cities': cities_list})
Ответ написан
alternativshik
@alternativshik
Сделать в одном методе и получение и сортировку, держать города в бд.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы