作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我有一个托管的 web 项目,问题是特定页面的加载速度非常慢。
原因是我猜我正在迭代讲座的 Jquery 代码,我有超过 1200 个讲座。我通常显示所有讲座并通过搜索过滤它们,然后我认为如果我什么都不显示并且只在有人搜索时显示它会更快,但它仍然很慢。这是我的 html。先感谢您。
html
{% extends "base.html" %}
{%block content%}
{% load crispy_forms_tags %}
<div class="container"><h1 style="text-align:center;">Not Dağılımları</h1>
<hr>
</div>
<div class="container">
<div class="form-group pull-right">
<input type="text" class="search form-control" placeholder="Ara">
</div>
<span class="counter pull-right"></span>
<table style="background-color:white;"class="table table-hover results">
<thead>
<tr>
<th >Hoca</th>
<th>Fakülte</th>
<th >Ders</th>
</tr>
<tr class="warning no-result">
<td><i class="fa fa-warning"></i> Sonuç Yok</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<script>
$(document).ready(function(){
$(".search").keyup(function () {
$('tbody').find('tr').remove();
var searchTerm = $(".search").val().toLowerCase();
if (searchTerm.length>2){
list=[]
{%for lec in lecturer_list%}
if( '{{lec}}'.toLowerCase().includes(searchTerm)){
$('tbody').append('<tr><td><p><a style="text-decoration:none;color:#002855;" href="{% url 'distribution:lecturer_distribution' slug=lec.slug%}">{{lec.lecturer}}</a></p></td><td><p>{{lec.faculty}}</p></td><td style="color:white;">{%for ders in lec.lecture.all%}<a style="text-decoration:none;color:#002855;" href="{% url 'distribution:lecture_distribution' slug=ders.slug%}">{{ders.lecture}}</a>,{% endfor%}</td></tr>');
}
{%endfor%}
}
});
});
</script>
{% endblock content%}
编辑
class Lecturer(models.Model):
lecturer=models.CharField(max_length=128,blank=False)
lecture=models.ManyToManyField(Lecture,blank=True)
faculty=models.ForeignKey('Department', on_delete=models.CASCADE, related_name='department_for_lecturer')
slug = models.SlugField(unique=True)
def save(self, *args, **kwargs):
self.slug = self.slug or slugify(self.lecturer)
super().save(*args, **kwargs)
def get_lectures(self):
return ",".join([str(p) for p in self.lecture.all()])
def __str__(self):
return self.lecturer
class Meta:
ordering = ['lecturer']
View .py
class Index(generic.ListView):
template_name='home.html'
models=Lecturer
queryset = Lecturer.objects.all()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context ['lecturer_list'] = Lecturer.objects.order_by('lecturer')
return context
最佳答案
这是一个常见的 N+1 问题,您获取所有 Lecturer
s 在一个数据库查询中,但是对于每个 Lecturer
,您进行额外的查询以获取 lecture
对象,以及 faculty
与之相关的对象。
您可以在此处使用 .select_related(…)
[Django-doc] 提高效率对于一对一关系和多对一关系,以及 .prefetch_related(…)
[Django-doc]用于一对多和多对多关系。所以在这里你可以使用:
class Index(generic.ListView):
template_name='home.html'
model = Lecturer
context_object_name = 'lecture_list'
queryset = Lecturer.objects.select_related(
'faculty'
).prefetch_related('lecture').order_by('lecturer')
因为这是一个
ListView
,无需自己将查询集添加到上下文中,您可以使用
context_object_name
attribute [Django-doc] 指定传递查询集的变量的名称.
关于javascript - 页面在 Django 中加载非常缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64090579/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!