Django:在我从具有动态数据的视图呈现模板后,模板保持静态并且在将数据添加到数据库时不会更改
Django: after I render a template from a view with dynamic data the template stays static and does not change when data is added to the database
在我的 views.py 我有这个代码
from .forms import *
from students.models import Student
from classes.models import Class
from venues.models import Venue
from courses.models import Course
from registrations.models import Registration
class Test(View):
template_name = "test.html"
context = {}
data_summary = {
"total_students": Student.objects.all().count(),
"total_classes": Class.objects.all().count(),
"total_courses": Course.objects.all().count(),
"total_registrations": Registration.objects.all().count(),
}
def get(self,*args, **kwargs):
return render(self.request,self.template_name,self.data_summary)
在我的 test.html 我有这个:
<...snip ...>
<h3> Totals: </h3>
<hr>
</div>
<div class="row">
<div class="col-md-2 text-right">
<label style="color: Blue; font-size:24"> Students: </label>
</div>
<div class="col-md-2 text-right">
{% if total_students %}
<...剪断...>
模板呈现得非常好,但如果我更新我的数据库并添加另一个学生和/或 class 并重新加载我的页面,我字典中的数据不会更新。
我不知道为什么数据没有更新。我现在正在敲我的头,而不是 70 年代的好方法。
在您的例子中,data_summary
是一个 class 属性,并且是在 Test
class 首次声明时创建的(在模块加载时)。
您可以将其移动到 get
方法,并确保只要页面 get
发生
就会发生数据库调用
def get(self,*args, **kwargs):
data_summary = {
"total_students": Student.objects.all().count(),
"total_classes": Class.objects.all().count(),
"total_courses": Course.objects.all().count(),
"total_registrations": Registration.objects.all().count(),
}
return render(self.request,self.template_name,data_summary)
在我的 views.py 我有这个代码
from .forms import *
from students.models import Student
from classes.models import Class
from venues.models import Venue
from courses.models import Course
from registrations.models import Registration
class Test(View):
template_name = "test.html"
context = {}
data_summary = {
"total_students": Student.objects.all().count(),
"total_classes": Class.objects.all().count(),
"total_courses": Course.objects.all().count(),
"total_registrations": Registration.objects.all().count(),
}
def get(self,*args, **kwargs):
return render(self.request,self.template_name,self.data_summary)
在我的 test.html 我有这个:
<...snip ...>
<h3> Totals: </h3>
<hr>
</div>
<div class="row">
<div class="col-md-2 text-right">
<label style="color: Blue; font-size:24"> Students: </label>
</div>
<div class="col-md-2 text-right">
{% if total_students %}
<...剪断...>
模板呈现得非常好,但如果我更新我的数据库并添加另一个学生和/或 class 并重新加载我的页面,我字典中的数据不会更新。
我不知道为什么数据没有更新。我现在正在敲我的头,而不是 70 年代的好方法。
在您的例子中,data_summary
是一个 class 属性,并且是在 Test
class 首次声明时创建的(在模块加载时)。
您可以将其移动到 get
方法,并确保只要页面 get
发生
def get(self,*args, **kwargs):
data_summary = {
"total_students": Student.objects.all().count(),
"total_classes": Class.objects.all().count(),
"total_courses": Course.objects.all().count(),
"total_registrations": Registration.objects.all().count(),
}
return render(self.request,self.template_name,data_summary)