python - 使用 Django 外键,链接到 HTML 页面
问题描述
我为一所在线学校制作了一个 Django 应用程序,所以我添加了一个外键来链接数据库类和主题,我刚刚在管理页面中创建了一个主题,将它链接到想要的类中,当我试图在 HTML 页面中访问它时我我只是在所有课程上都有相同的主题,所以我认为我以错误的方式使用了外键!怎么做?请帮忙。
模型.py:
class Class(models.Model):
image= models.ImageField(upload_to="images")
name= models.CharField(max_length=200, default=1)
title= models.CharField(max_length=200)
def __str__(self):
return self.title
class Material(models.Model):
name= models.CharField(max_length=200, default=1)
title= models.CharField(max_length=200)
classes= models.ForeignKey(Class, default=1, on_delete=models.SET_DEFAULT)
def __str__(self):
return self.name
HTML页面:
<!DOCTYPE html>
<html>
{% load static %}
<head>
<meta charset="utf-8">
<title>Name</title>
<link rel="stylesheet" href="static/css/style.css">
</head>
<body>
<div>
<nav>
<div class="logo"><img src="static/images/Logo.png" width=50px></div>
<ul class="navul">
<li class="navli"><a class="nava" href="404.html">حول الموقع</a></li>
<li class="navli"><a class="nava" href="404.html">المكتبة</a></li>
<li class="navli"><a class="nava" href="404.html">الدورات</a></li>
<li class="navli"><a class="nava" href="/classes">الصفوف</a></li>
<li class="navli"><a class="nava" href="/">الصفحة الرئيسية</a></li>
<button class="bt1"><a href="#">سجل دخول</a></button>
</ul>
</nav>
<div class="div1">
<img src="static/images/Logo.png" width="90" class="logo2">
<h1 class="t1">الصفوف</h1>
</div>
<div class="cardrow">
{% for class in class.all %}
<div class="cardcolumn">
<a href="{{% url 'material' class.id %}}">
<div class="card">
<img class="imgcls" src="{{ class.image.url }}">
<h1>{{ class.title }}</h1>
</div>
</a>
</div>
{% endfor %}
</div>
</div>
</body>
</html>
视图.py:
def classes(reqest):
Classes= Class.objects
return render(reqest, 'classes/Classes.html', {"class":Classes})
def materials(reqest, classes_id):
theclass= get_object_or_404(Class, pk=classes_id)
Materials = Material.objects
return render(reqest, 'classes/Materials.html', {"material":Materials}, {"classes":theclass})
我希望你能理解我,谢谢
解决方案
您可以使用“class.material_set.all”来显示该类的所有材料
<!DOCTYPE html>
<html>
{% load static %}
<head>
<meta charset="utf-8">
<title>Name</title>
<link rel="stylesheet" href="static/css/style.css">
</head>
<body>
<div>
<nav>
<div class="logo"><img src="static/images/Logo.png" width=50px></div>
<ul class="navul">
<li class="navli"><a class="nava" href="404.html">حول الموقع</a></li>
<li class="navli"><a class="nava" href="404.html">المكتبة</a></li>
<li class="navli"><a class="nava" href="404.html">الدورات</a></li>
<li class="navli"><a class="nava" href="/classes">الصفوف</a></li>
<li class="navli"><a class="nava" href="/">الصفحة الرئيسية</a></li>
<button class="bt1"><a href="#">سجل دخول</a></button>
</ul>
</nav>
<div class="div1">
<img src="static/images/Logo.png" width="90" class="logo2">
<h1 class="t1">الصفوف</h1>
</div>
<div class="cardrow">
{% for class in class.all %}
<div class="cardcolumn">
<a href="{{% url 'material' class.id %}}">
<div class="card">
<img class="imgcls" src="{{ class.image.url }}">
<h1>{{ class.title }}</h1>
<ul>
{% for material in class.material_set.all %}
<li> {{material}}</li>
{% endfor %}
</ul>
</div>
</a>
</div>
{% endfor %}
</div>
</div>
</body>
</html>
有关详细信息,您可以在此处阅读
并使用它向模板发送多个上下文
def materials(request, classes_id):
theclass= get_object_or_404(Class, pk=classes_id)
Materials = Material.objects.all()
context = {
'classes': theclass,
'material': Materials
}
return render(request, 'classes/Materials.html', context)
有关上下文的更多信息,您可以在此处阅读,当您像这样使用“Classes=Class.objects”时,它将是对象管理器而不是查询集,使用“Classes=Class.objects.all()”代替查询集。
推荐阅读
- bash - Bash 脚本未在 .lua 上执行,退出状态 7(参数列表太长)
- javascript - 无法以角度过滤日期
- azure - 横向扩展 azure 应用服务与容器
- python - python中的分层采样,有约束
- javascript - 使用 vanilla Javascript 从选定的单选按钮中选择下一个/上一个单选按钮
- python - DQN 在不同的计算机上表现不同
- javascript - 如何在特定索引处的 DOM 字段对象中输入字符?
- html - 使粘性项目最初出现在屏幕中心
- javascript - Mosquitto MQTT有效负载在终端上接收但不在websocket上?
- java - IntelliJ IDEA 中的 Java 语言级别问题