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, как я надеялся?

Было трудно понять вашу проблему. Но есть некоторые вещи, которые вы можете попробовать, чтобы найти и решить вашу проблему.

  1. Объект away, который вы возвращаете из вашего your_details_view, является списком. Списки или QuerySets не несут поля pk. Только прямые Модели django имеют его. Так что правильным способом должно быть обход этого списка с помощью цикла for и доступ к полю pk внутри цикла. Как вы сделали в testing.html.

  2. Некоторые наборы запросов, которые вы конструируете внутри 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.

Вернуться на верх