Невозможно получить информацию из API codeforces в Django
В моем проекте мне нужно показать название сайта конкурса. Я не могу жестко закодировать название, так как мне нужно загрузить название & детали различных сайтов в соответствии с потребностями пользователя. Мне нужно показать название сайта конкурса, название конкурса, дату и время конкурса (найденные в формате UNIX в API, которые должны быть преобразованы), URL конкурса (который находится в списке возвращаемых элементов, но не отображается, пока я открываю API)
Я новичок в Django и впервые работаю с API
Я написал функцию в файле views.py
def homepage(request):
response = pip._vendor.requests.get('https://codeforces.com/api/contest.list').json()
return render(request,'home.html',response)
а в HTML я сделал вот так, чтобы получить название всех конкурсов
<div class="box">
{% for i in response %}
{{i.name}}
{% endfor %}
</div>
Я думаю, что проблема связана не с Django, а с тем, как вы обрабатываете JSON, в частности, в вашем представлении API из запроса (я предполагаю, что вы используете пакет requests) будет возвращать JSON
давайте посмотрим, что возвращает API:
{
"status": "OK",
"result": [
{
"id": 1768,
"name": "Codeforces Round (Div. 2)",
"type": "CF",
"phase": "BEFORE",
"frozen": false,
"durationSeconds": 7200,
"startTimeSeconds": 1672929300,
"relativeTimeSeconds": -2433104
},
{
"id": 1770,
"name": "Good Bye 2022",
"type": "CF",
"phase": "BEFORE",
"frozen": false,
"durationSeconds": 9000,
"startTimeSeconds": 1672410900,
"relativeTimeSeconds": -1914704
},
...
]
}
Итак, в ответе JSON нужная вам деталь - значение result
, это значение представляет собой массив словарей. Перебирая список, вы можете получить значение
from django.utils.timezone import make_aware
from datetime import datetime
def homepage(request):
response = pip._vendor.requests.get('https://codeforces.com/api/contest.list').json()
# convert timestamp to readable datetime string
for contest in response.result:
contest["start_time"] = make_aware(datetime.fromtimestamp(contest["startTimeSeconds"]))
return render(request,'home.html',response)
и в вашем шаблоне:
<div class="box">
{% for i in response.result %}
<h3>Name</h3>: <p>{{ i.name }}</p>
<h3>Date and time</h3>: <p>{{ i.start_time|date:'Y-m-d H:i' }}</p>
{% endfor %}
</div>
для формата даты-времени следуйте Django docs
Я не вижу ничего, связанного с contest URL
в вашем API, хотя