Ошибка выхода индекса списка за пределы диапазона из предыдущего представления при визуализации другого представления
Прошу прощения, если я упустил что-то глупое, но я новичок в Django и не могу разобраться с этим.
Я создаю базовое приложение в стиле reddit, ориентированное на криптовалюты. У меня есть представление, которое получает данные о цене из API и отображает их, а также все сообщения, относящиеся к этой монете:
views.py:
def coin_posts(request, id):
if request.method == 'GET':
coin_display = {}
post = Post.objects.filter(coin_name=id)
api = 'https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&ids=%s&order=market_cap_desc&per_page=100&page=1&sparkline=false' % id
response = requests.get(api)
data = response.json()
coin = data[0]
coin_data = Coins(
coin_id = coin['id'],
coin_name = coin['name'],
coin_price = coin['current_price'],
market_cap = coin['market_cap'],
rank = coin['market_cap_rank'],
price_change = coin['price_change_24h'],
slug = coin['symbol'],
image_url = coin['image']
)
coin_data.save()
coin_display = Coins.objects.filter(coin_id=id)
return render(request, 'coins.html', {
'post': post,
'coin_display': coin_display,
'post_form': PostForm()
},
)
Я хочу иметь возможность нажать на каждое сообщение, чтобы просмотреть все комментарии, связанные с этим сообщением, так как я еще не дошел до этого, я просто хочу иметь возможность просмотреть это отдельное сообщение на другой странице. Итак, каждый пост имеет следующую ссылку в шаблоне:
<a href="{% url 'coin_detail' slug=i.slug %}">Comments</a>
и вот соответствующие URL и вид:
urlpatterns = [
path('', views.index, name="index"),
path('<str:id>/', views.coin_posts, name='coin_posts'),
path('<slug:slug>/', views.post_detail, name='coin_detail'),
]
def post_detail(request, slug):
post = Post.objects.filter(slug=slug)
return render(request, 'coin_detail.html', {
'post': post,
},
)
Проблема в том, что когда я нажимаю на ссылку, я получаю ошибку: индекс списка вне диапазона. Который ссылается на coin = data[0] в первом представлении.
Я вижу, что он пытается заполнить базу данных, но поскольку нет данных GET, нет и списка для индексации. Мой вопрос в том, почему это происходит? Если я нажал на ссылку, которая вызывает функцию post_detail, почему выполняется код в функции coin_posts?
Я думаю, что проблема в путях url. Путь coin_posts "str:id/" равен пути post_detail 'slug:slug/'. Единственное различие между этими двумя урлами в том, что str принимает только строку, а slug будет соответствовать любой строке slug, состоящей из ASCII букв или цифр, плюс дефис и символ подчеркивания (reference). Попробуйте дефференцировать путь, добавив другой путь, например:
urlpatterns = [
path('', views.index, name="index"),
path('coin_posts/<str:id>/', views.coin_posts, name='coin_posts'),
path('post_detail/<slug:slug>/', views.post_detail, name='coin_detail'),
]