首页 > 解决方案 > 使用 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})

我希望你能理解我,谢谢

标签: pythondjangoforeign-keys

解决方案


您可以使用“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()”代替查询集。


推荐阅读