我正在尝试从django过滤器实现列表过滤器。第一个“type”是我希望我的过滤器基于的属性,在我的应用程序的models.py中。
class detaileditems(models.Model):
title = models.CharField(max_length= 255)
type = models.CharField(max_length= 45, null=True)
pubdate = models.DateTimeField()
body = models.TextField()
image = models.ImageField(upload_to= 'images/')
我已经在应用程序中创建了一个单独的filters.py,并在其中调用了过滤器。
import django_filters
from .models import detaileditems
class ListingFilters(django_filters.FilterSet):
class Meta:
model = detaileditems
fields = {'type': ['exact']}
接下来是我在views.py文件中的函数-
from .models import detaileditems
from .filters import ListingFilters
def alldetailed2(request):
items = detaileditems.objects
listing_filter = ListingFilters(request.GET, queryset=items)
context = {
'listing_filter' : listing_filter,
'items': items,
}
return render(request, 'detailed2/detailed2.html',context)
最后在我的html文件“detailed 2. html”中,它位于“detailed 2”的应用程序模板文件夹中。
<div class = "col-lg-6 col-md-8 mx-auto">
<form method = "get">
{{ listing_filter.form }}
<button class="btn btn-sm btn-danger" type="submit">Search</button>
</form>
</div>
<div class = "container">
<div class = "row row-cols-1 row-cols-sm2 row-cols-md-3 g-3">
{% for listing in listing_filter.qs %}
<div class = "col">
{% include "detailed2/detailed2.html" %}
</div>
{% endfor %}
</div>
</div>
我得到一个最大递归深度错误。
这里是我的文件夹结构,以便更好地理解。
3条答案
按热度按时间xdnvmnnf1#
有一篇关于最大递归深度的文章:earlier post
有时候可以通过重新思考算法来找到解决方案,例如使用列表迭代而不是递归。我猜你需要说服自己没有犯错误,然后向Django提交问题。
作为一个快速的解决方案,你可以尝试增加递归的深度。
我确实在html中看到了一个自引用:
“{%包含“详细信息2/detailed2.html”%}“
那会是你麻烦的根源吗?
mwg9r5ms2#
我猜你错过了表单操作。当有一个关键字输入,然后表单提交应该调用相同的函数,因为你正在使用列出所有的文章。
在查看功能中:
zpqajqem3#
在OP的
views.py
中,确保在OP获取项目时,其末尾为.all()
然后你就可以像这样在自己的模板中渲染
而不是
请记住,还有guidelines in the way one names classes, functions, ...。
Django的模型应该使用
CapWords
的约定,同时也考虑了anti-pattern to use model classes with a plural name,所以用DetailedItem
代替detaileditems
。函数名应该小写,单词之间用下划线分隔,例如
all_detailed_2
而不是alldetailed2
。