从DB中提取数据,导致404页没有发现错误



我正在尝试以一种方式过滤我的观点显示与该学校相对应的适当专业。

我现在找到一个未找到的页面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})

我将发布索引文件的代码,该索引文件将在下面提取学校信息,然后单击学校(超链接集),它基本上想将学校的主要键传递到主要功能中,然后再进行进一步的过滤。

  <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所具有的格式提供了一个示例。%仍然弹出我不明白,我重新启动了服务器,以为它可能在烦恼,但nada。

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')
]

我遇到的当前路径错误仍然相同,但是我不明白的是将模板修复到适当的格式之后(我还将我的示例项目用作没有此的参考通过参数的问题)我不仅通过/定位/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.

请注意,即使我解决了错误,也会在其中添加{%。

我认为模板应该是:

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

url就是这样:

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

以获取参考,请检查文档。

在您的循环中应该是

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

只需删除双卷括号{{ }}

,所以我注意到错误消息中此特定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都以相同的方式进行设置,但没有这个问题,但是由于某种原因,我尝试过的一切都不会推动,我必须放置一个空间才能工作