【发布时间】:2022-06-27 00:15:31
【问题描述】:
我正在制作一个网站,让学生可以为他们的课程找到即将到来的学习课程。我在 Django 和 HTML 中这样做。学生将他们的课程上传到该站点,它们在课程页面上显示为按钮(例如 CS 101 - CS 简介)。当学生点击他们的一门课程(按钮)时,应该会将他们带到一个页面,该页面显示该课程的可用学习课程。我被卡住了,因为我不知道如何根据单击的课程正确过滤下一页上的可用学习课程。有没有办法将课程信息存储为变量,以便在单击按钮时我可以使用该变量来过滤结果? 编辑:我已经进行了这些更改,现在我得到一个 ValueError 太多值,无法解压预期的 2。我几乎可以肯定它正在我的视图中发生。
这是显示用户课程的页面:
<div class="container h-100" style="top:50%; bottom:50%; width:100%;">
<div class="row">
{% if courses_list %}
{% for course in courses_list %}
<a type="button" class="btn btn-outline-secondary" href="{% url 'study:course-session'%}" >{{ course.subject }} {{ course.number}}-{{course.name}} </a>
<br><br><br>
{% endfor %}
{% else %}
<p class="text-center">You have not added any courses yet!</p>
{% endif %}
</div>
</div>
这是我试图过滤学习课程列表的页面(其中有一个实地课程是课程模型的外键):
<h1><center>Upcoming Study Sessions</center></h1>
<div>
<a class="btn btn-success" style="position:absolute; margin-right:2px; top:15%; right:0;" href="{% url 'study:courses' %}" role="button" >Back to My Courses</a>
</div>
<br><br>
<div class="container h-100" style="top:50%; bottom:50%; width:100%;">
<div class="row">
<button type="button" class="btn btn-outline-secondary" >Date/Time: {{ session.date }} <br> Location: {{ session.location }} </button>
<br><br><br>
</div>
</div>
模板视图:
def CourseSessionView(request, course_pk):
course_wanted = Course.objects.get(id=course_pk)
try:
return Study.objects.filter(course=course_wanted)
except:
return messages.error(request, 'There are no upcoming study sessions at this time for the requested course.')
课程和会话模型:
class Course(models.Model):
SUBJECT_CHOICES = [
('AAS', 'AAS')
]
subject = models.CharField(
max_length=4, choices=SUBJECT_CHOICES, default='')
number = models.PositiveSmallIntegerField(
validators=[MaxValueValidator(9999)], default=0)
name = models.CharField(max_length=100, default='')
roster = models.ManyToManyField(
Student, blank=True, related_name="courses")
# Use [Student object].courses.all() to see all of a student's courses
def __str__(self):
return f"{self.subject} {self.number} - {self.name}"
class Study(models.Model):
organizer = models.ForeignKey(Student, on_delete=models.CASCADE)
date = models.DateTimeField()
# Use [Student object].studies.all() to see all of a student's study sessions
attendees = models.ManyToManyField(Student, related_name="studies")
location = models.CharField(max_length=30)
course = models.ForeignKey(Course, on_delete=models.CASCADE)
def __str__(self):
return f"{self.date} - {self.location}"
网址:
path('<int:course_pk>/sessions/',
views.CourseSessionView, name='course-session')
【问题讨论】:
-
这个错误完全有道理,你是
returning直接在你的try-except块中查询集,在你的CourseSessionView中,请将查询集存储在变量中,然后在try-except块之后,将其作为上下文返回并呈现 html 模板,例如return render(request,"appname/anyfile.html", context)。并且请基于函数的视图不需要名称在PascalCase中,它应该在snake_case中。PascalCase用于基于类的视图。 -
您好,感谢您帮助我解决问题。我理解您所说的关于名称格式的内容,这正是教授希望我们对视图进行格式设置的方式,所以我想站在他们好的一边。
标签: python django django-models django-views django-templates