Я пытаюсь отфильтровать свои представления таким образом, чтобы при выборе конкретной школы pk школы помещался в функцию представления, называемую major, которая дополнительно запрашивала бы базу данных, чтобы отобразить соответствующие майоры, соответствующие этомушкола.
У меня теперь страница не найдена, ошибка 404, и я не могу понять, почему.
url.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('<int:Major>/', views.Major, name='Major')
]
models.py
from django.db import models
class Major(models.Model):
name = models.CharField(max_length=30, db_index=True)
class School(models.Model):
name = models.CharField(max_length=50, db_index=True)
school_Major_merge = models.ManyToManyField(Major, through='School_Major')
class School_Major(models.Model):
major = models.ForeignKey(Major, on_delete=models.CASCADE)
school = models.ForeignKey(School, on_delete=models.CASCADE)
class professor(models.Model):
ProfessorIDS = models.IntegerField()
ProfessorName = models.CharField(max_length=100)
ProfessorRating = models.DecimalField(decimal_places=2,max_digits=4)
NumberofRatings = models.CharField(max_length=50)
#delete major from the model
school = models.ForeignKey(School , on_delete=models.CASCADE)
major = models.ForeignKey(Major , on_delete=models.CASCADE)
def __str__(self):
return self.ProfessorName
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, school_pk):
#Filter to a show the association of 1 schools majors
school_choice = Major_School.objects.filter(school_id = school_pk)
#Filter majors names required
majors = Major.objects.filter(id = school_choice.major_id)
return render(request, 'locate/major.html', {'majors' : majors})
Я опубликую код для индексного файла, который извлекает информацию о школах ниже, а при нажатии на школу (набор гиперссылок) она в основном предполагает пропускпервичный ключ школы в функцию Major, которая затем выполняет дальнейшую фильтрацию.
<ul>
{% for list in schools %}
<li><a href="{% url 'Major' {{list.id}}">{{list.name}}</a></li>
<br><br>
{%endfor%}
</ul>
Первичный ключ школы извлекается правильно, но по какой-то причине функция не срабатывает, когда я нажимаю наГиперссылка для школы Я получаю страницу 404 «Не найдено».
Назначение основной функции, 1) Получить первичный ключ школы, который будет передан в таблицу M2M.2) Теперь, когда отображаются ТОЛЬКО мажоры, соответствующие этой школе, фильтруйте и сохраняйте ТОЛЬКО мажоры, у которых первичные ключи связаны с выбранной школой
Я думаю, что логика моей функции верна, я просто не могуеще раз понять, почему я получаю ошибку 404.
Вот точная ошибка, когда я нажимаю на первую школу, которая имеет PK = 1
The current path, locate/{% url 'Major' 1/, didn't match any of these.
Обновление:
Я руководствовался приведенными ниже предложениями и приведенным примером, согласно которому формат, который у меня есть для index.html, подходит для диспетчера, а диспетчер также настроен правильно, но ПОЧЕМУО, ПОЧЕМУ всплывающее окно {% все еще появляется? Я не понимаю, я перезапустил сервер, думая, что, может быть, он глючил, но нада.
index.html
{% for list in schools %}
<li><a href="{% url 'Major' 'list.id' %}">{{list.name}}</a></li>
<br><br>
{%endfor%}
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('<int:school_pk>/', views.Major, name='Major')
]
Текущий путь Ошибка у меня все тот же, но я не понимаю, что после исправления шаблона в правильном формате (я также использовал пример проекта, который я имел в качестве ссылкиэто неэта проблема не соответствует параметру) я передаю не просто / locate / school_pk, а фигурные скобки и%
locate/ [name='index']
locate/ <int:school_pk>/ [name='Major'] <== This one
admin/
register/ [name='register']
profile/ [name='profile']
login/ [name='login']
logout/ [name='logout']
[name='blog-home']
about/ [name='blog-about']
post/<int:pk>/ [name='post-detail']
post/new/ [name='post-create']
post/<int:pk>/update/ [name='post-update']
post/<int:pk>/delete/ [name='post-delete']
user/<str:username> [name='user-posts']
^media/(?P<path>.*)$
The current path, locate/{% url 'Major' 1/, didn't match any of these.
Обратите внимание, что {% добавляется туда, даже после того, как я исправил свойошибка.