Django if statement для использования контекста в шаблоне

Что я пытаюсь достичь: Я получаю данные из API, я хочу отобразить эти данные в моем шаблоне только при выполнении условий.

Что я пробовал #1: Я добавил булево значение в мою модель, которая связана с API, под названием "accessconfirmed" и затем В моих представлениях я добавил оператор if, говорящий, что если доступ подтвержден, то отображается этот контекст, а если нет, то отображается другой контекст. Я не получаю ошибку, но мои данные из API больше не отображаются, я ничего не получаю. Вот код в views.py

ПРОСМОТРОВ:

def projectdetailscoins(request, pk):
    coin = Coin.objects.get(id=pk)
    notifications = Notification.objects.all()
    accessconfirmed = Coin.is_api_access
    api_coin_number_variable = coin.api_coin_number
    url = 'XXX'
    parameters = {
        'slug': coin.api_slug,
        'convert': 'USD',
    }
    headers = {
        'Accepts': 'application/json',
        'X-CMC_PRO_API_KEY': 'XXX'
    }
    session = Session()
    session.headers.update(headers)
    response = session.get(url, params=parameters)
    api_price = response.json()
    if accessconfirmed == True:
        context = {'coin':coin, 'notifications':notifications,
        'gimmeprice':api_price['data'][api_coin_number_variable]['quote']['USD']['price'],
        'gimme24h':api_price['data'][api_coin_number_variable]['quote']['USD']['percent_change_24h'],
        'accessconfirmed':accessconfirmed,
    }
    else:
        context = {'coin':coin, 'notifications':notifications,}
    
    return render(request, 'blog/project_details_coin.html', context)

Что я пробовал #2: Я также попробовал изменить оператор if с на

if accessconfirmed == True:

to

if accessconfirmed:

данные отображаются правильно в моем шаблоне, если я делаю это, но когда я перехожу к PK без "accessconfirmed" я получаю эту ошибку

KeyError

Тип исключения: KeyError

Значение исключения: 'data'

строка 62 - ...'gimmeprice':api_price['data'][api_coin_number_variable]['quote']['USD']['price'],....

пожалуйста, посоветуйте, что я делаю не так

ИСПРАВИЛ ЕГО.

я понял, что оператор if просто проверяет, подтвержден ли доступ, вместо того, чтобы проверять, подтвержден ли доступ для каждого отдельного объекта, поэтому я изменил его на

if accessconfirmed:

to

if coin.is_api_access:

и теперь все хорошо, оставляю это на случай, если кто-то столкнется с подобными проблемами

Вернуться на верх