django.urls.exceptions.NoReverseMatch: обратное для «профессоров» с аргументами (1, 5) «не найдено - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь отфильтровать таблицу преподавателей, чтобы отобразить профессоров, которые соответствуют определенной школе и специализации, параметры отображаются в сообщении об ошибке, я просто не понимаю, почему вообще появляется сообщение об ошибке.

Views.py

from django.http import HttpResponse
from django.shortcuts import render
from .models import professor, School, Major, School_Major

def index(request):
    schools = School.objects.all()
    return render(request, 'locate/index.html', {'schools': schools})


# def Major(request, Major):
#   major_choice = professor.objects.filter(Major =Major)
#   return render(request, 'locate/major.html', {'major_choice': major_choice})

def Majors(request, school_pk):
    schools_majors_ids = []
    major_after_filter = []

    #Filter to a show the association of 1 schools majors
    school_choice = School_Major.objects.filter(school_id = school_pk)

    #Append each of the major id's to school_majors_ids list
    for store in school_choice:
        schools_majors_ids.append(store.major_id)

    #Filter majors names required
    for store in schools_majors_ids:
        name = Major.objects.get(id = store)
        major_after_filter.append(name)
    return render(request, 'locate/major.html', {'major_after_filter' : major_after_filter,
                                                 'school_pk' : school_pk})

def Professors(request, school_pk, major_pk):
    professors = professors.objects.filter(school_id = school_pk).filter(major_id = major_pk)
    return render(request, 'locate/professors', {'professors' : professors})

url.py

from django.urls import path

from . import views


urlpatterns = [
    path('', views.index, name='index'),
    path(' <int:school_pk>/', views.Majors, name='Major'),
    path(' <int:school_pk/<int:major_pk>/', views.Professors, name="Professors")
]

majors.html

<h3 id="test">{{school_pk}}</h3>
            <ul>
                {% for major in major_after_filter %}

                <li><a href="{% url 'Professors' school_pk major.id %}">{{major.name}}</a></li>

                {%endfor%}
            </ul>

Мне нужен был способ разместитьзначение первичного ключа школ, а также первичного ключа майоров в качестве параметров функции представления «Профессор», чтобы можно было отфильтровать таблицу профессоров для отображения правильных мажоров.

Когда я покидаю school_pk, как виднониже

Я получаю следующую ошибку

django.urls.exceptions.NoReverseMatch: Reverse for 'Professors' with arguments '(1, 5)' not found. 1 pattern(s) tried: ['locate/\\ <int:school_pk/(?P<major_pk>[0-9]+)/$']

Когда я удаляю school_pk, как показано ниже

<li><a href="{% url 'Professors' major.id %}">{{major.name}}</a></li>

Я получаю эту ошибку

TypeError: Professors() missing 1 required positional argument: 'school_pk'

Это имеет смысл, потому что функция Professor требует параметра school_pk ( Обратите внимание, что переменная, используемая в html и параметре, названа одинаково, извините, если это кажется запутанным ).

1 Ответ

0 голосов
/ 17 февраля 2019

В вашем шаблоне URL отсутствует закрывающая скобка.

path('<int:school_pk>/<int:major_pk>/', 
                    ^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...