В течение последних нескольких дней я работал над созданием веб-приложения Django, позволяющего пользователям делать запросы в базе данных статистики MLB.У меня есть некоторые веб-приложения, работающие нормально, однако я попытался реализовать функцию поиска и столкнулся с проблемами с отображением URL.Я попытался уйти от этого и вместо этого работать над тем, чтобы заставить базу данных отображать информацию, основанную на ссылке на проигрыватель, на который они нажимают, но я сталкиваюсь с той же проблемой, когда URL-адрес динамический на основе player_id игрока.В этой части используется только модель People, для которой в качестве первичного ключа используется player_id.
В настоящее время у меня есть файл «allPlayers.html», в котором перечислены все игроки в базе данных вместе со ссылкой, которая отправляет player_id
игрока наURL как:
allPlayers.html
{% extends "base_template.html" %}
{% block content %}
<h1>MLB Stats All Players</h1>
<p>Currently, there are : {{ num_players }} players listed in the database.</p>
<table style="width:100%">
<tr>
<th>First Name</th>
<th>Last Name</th>
<th></th>
</tr>
{% for player in players %}
<tr>
<td>{{ player.name_first }}</td>
<td>{{ player.name_last }}</td>
<td>More on <a href="player/{{ player.player_id }}/">{{ player.name_first }} {{ player.name_last }}</a></td>
</tr>
{% endfor %}
</table>
{% endblock %}
И соответствующее представление для 'allPlayers.html':
def allplayers(request):
"""View function for allPlayers page of site."""
# Generate counts of people object
num_players = People.objects.count()
players = People.objects.all()
context = {
'num_players': num_players,
'players': players,
}
# Render the HTML template allPlayers.html w/ data in context variable
return render(request, 'allPlayers.html', context=context)
Только сВыше я успешно создал страницу в своем веб-приложении, в которой перечислены все игроки в базе данных вместе со ссылкой, и заметил, что я пытаюсь отправить player_id
через <a href='players/{{ player.player_id }}>
.В настоящее время часть allPlayers
работает нормально.Однако дела идут на юг, когда я добавляю следующее playerInfo.html
и соответствующее представление:
playerInfo.html
{% extends "base_template.html" %}
{% block content %}
{% if results %}
{% for player in results %}
<p>{{ player.name_first }} {{ player.name_last }}</p>
{% endfor %}
{% endif %}
{% endblock %}
И представление:
def player(request, pk=None):
if pk is not None:
print('Hello world')
print('pk :', pk)
#instance = get_object_or_404(People, player_id=pk)
results = People.object.filter(player_id=pk)
context = {
"results": results
}
return render(request, "playerInfo.html", context)
else:
print('Hello')
return render(request, 'playerInfo.html')
Моя идея заключалась в том, что указанная ранее ссылка, содержащая {{ player.player_id }}
, будет соответствовать следующему URL и помещать значение player_id
в pk
следующим образом, используя синтаксис <int:pk>
вместо регулярного выражения:
polls / urls.py
urlpatterns = [
path('', views.index, name='index'),
path('allPlayers', views.allplayers, name='allplayers'),
path('allTeams', views.allteams, name='allteams'),
path('search/', views.search, name='search'),
path('player/<int:pk>/', views.player, name='player'),
]
Однако, как только я перехожу на свою страницу «allPlayers» и нажимаю на одну из ссылок для игрока, скажем Хэнк Аарон (кто имеет player_id aaronha01), я получаю следующее Страница не найдена (404) ошибка:
Using the URLconf defined in baseballdb.urls, Django tried these URL patterns, in this order:
polls/ [name='index']
polls/ allPlayers [name='allplayers']
polls/ allTeams [name='allteams']
polls/ search/ [name='search']
polls/ player/<int:pk>/ [name='player']
admin/
The current path, polls/player/aaronha01/, didn't match any of these.
У меня проблемы с этим уже довольно много.Если у кого-то есть какой-либо совет и он может указать мне правильное направление, как я думаю об этом неправильно, или у меня есть решение, которое будет серьезно оценено!Спасибо.