【发布时间】:2019-07-10 06:40:50
【问题描述】:
我正在尝试以这样的方式过滤我的观点,即选择特定学校,学校的PK将放置在一个名为专业的视图函数中,这将进一步查询DB以显示对应的正确专业学校。
我现在收到一个找不到页面的 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 page not found 错误。
主要功能的目的, 1) 接收学校的主键,将传递到 M2M 表。 2) 现在只显示与该学校对应的专业,只过滤并存储与所选学校相关联的主键的专业
我认为我的函数逻辑是正确的,我只是无法再次理解为什么会出现 404 错误。
这是我点击第一所学校时的确切错误,它的 PK = 1
The current path, locate/{% url 'Major' 1/, didn't match any of these.
更新:
我根据以下建议进行了操作,并举了一个示例,我为 index.html 提供的格式适用于调度程序,并且调度程序也已正确设置,但是为什么 OH 为什么这样做 { % 仍然弹出我不明白,我重新启动了服务器,以为它可能在窃听,但 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')
]
我遇到的当前路径错误仍然相同,但我不明白的是在将模板修复为正确格式之后(我还使用了一个示例项目作为参考,但没有这个传递参数的问题)我不只是传递 /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.
请注意其中添加了 {%,即使在我纠正了错误之后也是如此。
【问题讨论】:
标签: django python-3.x django-templates