Как решить проблему преобразования строки в данные на шаблоне Django - PullRequest
1 голос
/ 07 апреля 2020

У меня проблема преобразования строки в шаблон Django. Я пытаюсь взять строку (даты) и рассчитать дни с этой даты; поэтому он говорит что-то вроде «1 месяц, 2 недели (так как все время высокая дата)». Преобразование строки в дату работает нормально, проблема в шаблоне Django. В настоящее время шаблон показывает только последнюю дату из запроса данных json для каждого элемента, возвращенного в для l oop. Очевидно, мне нужна дата для каждой конкретной c записи, конвертированной и отображаемой.

Я отформатировал строку из запроса данных json в объект даты.

В настоящее время в качестве переменной days_since_ath_formatted отправляется только последний элемент в списке.

Вот определение вида Django:

coin_list_url = f"https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page={per_page_limit}&page=1&sparkline=false"

    request_coin_list = requests.get(coin_list_url)
    results_coin_list = request_coin_list.json()

    crypto_data_geckco = []


#string to date conversion

    def to_string(time):
        return time.strftime('%Y %M %d')

    def from_string(date, formatting):
        dt = datetime.datetime.strptime(date, formatting)
        return dt

#for loop
    for currency_gecko in results_coin_list:
        days_since_ath = currency_gecko['ath_date']
        days_since_ath_formatted = from_string(days_since_ath[:-14], "%Y-%m-%d")
        print('days since ath formatted', days_since_ath_formatted)
        crypto_data_geckco.append(currency_gecko)
        print("crypto_data_geckco", crypto_data_geckco)


    return render(request, 'crypto/latest.html', { 'crypto_data_geckco': crypto_data_geckco, 'days_since_ath_formatted': days_since_ath_formatted} )

и затем включено шаблон Django:

{% for currency in crypto_data_geckco %}

    All-Time Percentage: {{ currency.ath_change_percentage|intword }}%

    and passing the "days_since_ath_formatted" variable only accesses the last item in the list:

    Days since ATH: {{ days_since_ath_formatted|timesince }}

{% endfor %}

В {{ days_since_ath_formatted|timesince }} должна отображаться отдельная дата для каждого элемента, возвращаемого в поле для l oop. На данный момент он отображает только последний элемент в списке json для каждого элемента в поле для l oop.

1 Ответ

1 голос
/ 07 апреля 2020

Не похоже, что вы на самом деле сохраняете значение days_since_ath_formatted при циклическом просмотре этого списка, вы, вероятно, хотите сохранить в формате dict:

for currency_gecko in results_coin_list:
    currency = {}
    currency['ath_change_percentage'] = currency_gecko.ath_change_percentage
    currency['days_since_ath_formatted'] = from_string(days_since_ath[:-14], "%Y-%m-%d")
    print('days since ath formatted', days_since_ath_formatted)
    crypto_data_geckco.append(currency)
    print("crypto_data_geckco", currency)


return render(request, 'crypto/latest.html', { 'crypto_data_geckco': crypto_data_geckco, 'days_since_ath_formatted': days_since_ath_formatted} )

Тогда в шаблоне вы захотите что-то как:

{% for currency in crypto_data_geckco %}

    All-Time Percentage: {{ currency.ath_change_percentage|intword }}%

    and passing the "days_since_ath_formatted" variable only accesses the last item in the list:

    Days since ATH: {{ currency.days_since_ath_formatted|timesince }}

{% endfor %}

Я не могу точно сказать, но я думаю, что ваш results_coin_list является набором запросов, и в этом случае вы также можете добавить свойство к модели напрямую

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...