Django URL диспетчер и списки?
Я не уверен, что терминология названия имеет большой смысл. Но у меня довольно слабое представление о диспетчере URL, и если то, о чем я спрашиваю, действительно относится к диспетчеру или нет.
Вот мой файл представлений:
def current_game_table(request):
items = list(Nbav8.objects.using('totals').all())
# rest of your code
return render(request, 'home/testing.html', {'items': items})
def your_details_view(request, pk):
item = Nbav8.objects.using('totals').get(pk=pk)
current_day_home_team = list(Nbav8.objects.using('totals').values_list('home_team_field', flat=True))
current_day_away_team = list(Nbav8.objects.using('totals').values_list('away_team_field', flat=True))
awayuyu = []
homeuyu = []
for team in current_day_home_team:
home_team_list1 = PreviousLossesNbav1WithDateAgg.objects.using('totals').filter(Q(away_team_field=team) | Q(home_team_field=team)).values_list('actual_over_under_result_field', flat=True)
homeuyu.append(list(home_team_list1[:5]))
home_team_list2 = homeuyu
typeitem = type(item)
typehome = type(current_day_home_team)
for team in current_day_away_team:
away_team_list1 = PreviousLossesNbav1WithDateAgg.objects.using('totals').filter(Q(away_team_field=team) | Q(home_team_field=team)).values_list('actual_over_under_result_field', flat=True)
away_teamdd = away_team_list1[:5]
awayuyu.append(list(away_team_list1[:5]))
away_team_list2 = awayuyu
return render(request, 'home/testing2.html', {'item': item, 'away': away_team_list2, 'home': home_team_list2, 'type1': typeitem, 'type2': typehome, 'eep': current_day_home_team})
Вот мой testing.html
Hello World
{{ items }}
{% for item in items %}
<a href="{% url 'your_details_view' item.pk %}">{{ item.home_team_field }}</a>
{% endfor %}
Здесь testing2.html
<p>The price of this item is: {{ item }}</p>
<p>The price of this item is: {{ home }}</p>
<p>The price of this item is: {{ away }}</p>
{{ eep }}
<a href="{% url 'your_details_view' item.pk %}">{{ away }}</a>
А вот моя страница url:
from django.urls import path, re_path
from apps.home import views
urlpatterns = [
# The home page
#path('', views.index, name='home'),
# Matches any html file
#path('charttest/', views.charttest, name='charts'),
path('', views.nba, name='nba'),
path('nbav2/', views.nba2, name='nba2'),
path('nbav3/', views.nba3, name='nba3'),
path('ncaa/', views.ncaa, name='ncaa'),
path('nhl/', views.nhl, name='nhl'),
path('testing/', views.current_game_table, name='testing'),
path('your_details_view/<int:pk>', views.your_details_view, name='your_details_view')
# re_path(r'^.*\.*', views.pages, name='pages'),
]
Мой вопрос в том, что элемент в your_details_view автоматически получает pk, который является просто автоматически увеличивающимся int. Поэтому, когда я нажимаю на каждую гиперссылку с главной страницы тестирования, она переводит меня на подстраницу /your_details_view/1 для первого экземпляра, /2 для второго, что именно то, что я хочу. Я также могу вывести элемент в представлении testing2.html, которое автоматически отображает мне 1,2,3 на каждой вложенной html-странице. Мой вопрос в том, что если я создам список в функции "your_details_view", как я могу автоматически перебирать его на каждой странице так же, как увеличивается "item"? Я попробовал сделать это на странице testing2.html, но это не сработало, как я надеялся
<p>The price of this item is: {{ item }}</p>
<p>The price of this item is: {{ home }}</p>
<p>The price of this item is: {{ away }}</p>
{{ eep }}
<a href="{% url 'your_details_view' item.pk %}">{{ away.pk }}</a>
Я добавил .pk в этот список или пункт, но он не проиндексировал pk, как я надеялся?
Было трудно понять вашу проблему. Но есть некоторые вещи, которые вы можете попробовать, чтобы найти и решить вашу проблему.
Объект
away, который вы возвращаете из вашегоyour_details_view, является списком. Списки или QuerySets не несут поляpk. Только прямые Модели django имеют его. Так что правильным способом должно быть обход этого списка с помощью цикла for и доступ к полю pk внутри цикла. Как вы сделали вtesting.html.Некоторые наборы запросов, которые вы конструируете внутри
your_details_view, используют функциюvalues_list. Если вам понадобится полеpkв вашем шаблоне, вы также должны включить его в вызовvalues_list. Например, в спискеaway_team_list1будет сохранен толькоactual_over_under_result_field, но не полеpk.
BTW... QuerySets являются итерабельными, поэтому вам не нужно явно приводить их к списку, чтобы обойти их по шаблону.
# no need to convert to list type
items = list(Nbav8.objects.using('totals').all())
Мой собственный ответ на вопрос состоит в том, чтобы генерировать список на моем бэкенде py файлов и посылать в БД, затем брать из таблицы БД, используя pk как мой индекс, я считаю, что работа в моем вопросе должна быть сделана на бэкенде, а не в файле views.