При извлечении данных из БД ошибка 404 страницы не найдена - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь отфильтровать свои представления таким образом, чтобы при выборе конкретной школы 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.

Обратите внимание, что {% добавляется туда, даже после того, как я исправил свойошибка.

Ответы [ 3 ]

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

В вашем цикле for это должно быть

<ul>
    {% for list in schools %}
        <li><a href="{% url 'Major' list.id">{{list.name}}</a></li>
        <br><br>
    {%endfor%}
</ul>

Просто удалите двойные фигурные скобки {{ }}

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

Итак, я заметил, что между этим конкретным диспетчером url в сообщении об ошибке есть пробел

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.

Итак, я добавил пробел в url.py, который, похоже, добился цели

url.py

from django.urls import path

from . import views


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

Все остальные мои URL в моем основном проекте настроены одинаково, но у меня нет этой проблемы, но по какой-то причине все, что я пробовал, не подтолкнуло, у меня былоразместить пробел, чтобы он работал

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

Я думаю, что шаблон должен быть:

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

Где URL выглядит примерно так:

path('<int:school_pk>/', views.Major, name='Major')

Для справки, пожалуйста, ознакомьтесь с документацией .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...