我的数据库中有两个模型。 它们是:-
主题是模块的外键。
这是我的模特。py
from django.db import models
class Modules(models.Model):
name = models.CharField(max_length=500,null=False)
def __str__(self):
return self.name
class Topics(models.Model):
modules = models.ForeignKey(Modules,on_delete=models.CASCADE)
name = models.CharField(max_length=500)
这是我的HTML代码:-
{% extends "algorithms/header.html" %}
{% block content %}
{% if all_topics %}
<div class="row">
{% for topic in modules.topics_set.all %}
<div class="col s12 m6">
<div class="card cyan lighten-4">
<div class="card-content black-text">
<span class="card-title"><b>{{ topic.name }}</b></span> <p>{{topic.algorithm_content|safe}}</p>
</div>
<div class="card-action">
<a href="/algorithms/{{ module_name }}/{{ topic.name }}/">View</a>
</div>
</div>
</div>
{% endfor %}
</div>
{% else %}
<h3>The admin has not uploaded any courses yet</h3>
{% endif %}
{% endblock %}
这是我的views.py all_topics包含数据库中的所有主题。
#Import Dependencies
from django.http import HttpResponse,Http404
from .models import Modules,Topics
from django.shortcuts import render
def index(request):
all_modules = Modules.objects.all()
html = ''
context = {
'all_modules':all_modules,
}
return render(request,'algorithms/home.html',context)
def topic(request,module_name):
print(module_name)
all_topics = Topics.objects.all()
all_modules = Modules.objects.all()
try:
module = Modules.objects.get(name=module_name)
except Modules.DoesNotExist:
raise Http404("Module does not exist.")
context = {
'all_topics' : all_topics,
'module_name' : module_name
}
return render(request,'algorithms/topic.html',context)
我看不到“主题”模型的任何数据。
答案 0 :(得分:0)
这里的问题与外键无关。这是因为视图和模板之间的命名完全缺乏一致性。
您的topic
视图将两件事发送到模板:all_topics
(这是数据库中所有Topics项的列表)和module_name
(这是一个字符串)。在该视图中定义的另外两件事-all_modules
和module
-被简单地丢弃了。 (请注意,偶数视图本身似乎被错误命名,因为它查询的是模块而不是主题。)
然后,在视图中,您在if
上有一个all_topics
条件,但是在该块内,您尝试遍历modules.topics_set.all
。但是modules
从未定义;它肯定不会发送到模板,但是视图中甚至没有该名称的变量。
也许您打算做的是定义一个module
视图,该视图将特定的模块发送到模板,然后对其进行迭代?如果是这样,那是您应该做的。
def module(request, module_name):
all_topics = Topics.objects.all()
try:
module = Modules.objects.get(name=module_name)
except Modules.DoesNotExist:
raise Http404("Module does not exist.")
context = {
'all_topics': all_topics,
'module': module
}
return render(request,'algorithms/topic.html', context)
,然后在模板中直接对其进行迭代:
{% block content %}
<div class="row">
{% for topic in module.topics_set.all %}
<div class="col s12 m6">
<div class="card cyan lighten-4">
<div class="card-content black-text">
<span class="card-title"><b>{{ topic.name }}</b></span>
<p>{{topic.algorithm_content|safe}}</p>
</div>
<div class="card-action">
<a href="/algorithms/{{ module_name }}/{{ topic.name }}/">View</a>
</div>
</div>
</div>
{% empty %}
<h3>The admin has not uploaded any courses yet</h3>
{% endfor %}
</div>
请注意从modules
到module
的更改,并使用for...empty
而不是if
。