我正在基于文档页面“第一步”中的应用程序在sqlite数据库中使用'items'和'characters'在Django中创建一个小站点。表(当前)遵循类似的格式,因此我想尝试制作灵活的模板。在我的views.py中,两个视图的设置如下:
<TreeViewLabel>:
width: self.texture_size[0]
height: max(self.texture_size[1] + dp(10), dp(24))
text_size: self.width, None
唯一的区别是sortby变量和目录变量。问题是,我想按照姓氏对字符进行排序,并按名称对项目进行排序。问题出现在我的模板中,特别是data.sortby:
def characters(request):
sortby = 'lastname'
data_list = Characters.objects.order_by(sortby)
template = loader.get_template('database.html')
context = {
'data_list': data_list,
'directory': 'wiki/characters',
'sortby': sortby,
}
return HttpResponse(template.render(context, request))
def items(request):
sortby = 'name'
data_list = Clothes.objects.order_by(sortby)
template = loader.get_template('database.html')
context = {
'data_list': data_list,
'directory': 'wiki/items',
'sortby': sortby,
}
return HttpResponse(template.render(context, request))
如果我手动引用我想要的字段而没有括号,它可以正常工作,所以我确定这是引起问题的字符串。如何按照我在views.py中指定的字段进行排序?
提前感谢菜鸟。
答案 0 :(得分:1)
你可以在这里得到一个想法(有点过时)answer,但最重要的是没有内置的方法来访问django模板中名称getattr()
- 样式的属性。因此,您需要编写自定义过滤器,如django docs:
# app/templatetags/attr_tags.py
from django import template
register = template.Library()
@register.filter
def get_attribute(value, arg):
return getattr(value, arg)
现在你可以在你的模板中做到:
{% load attr_tags %}
# ...
{{ data|get_attribute:sortby }}
# {{ data.sortby }} can't work because that tries to access
# an attribute named 'sortby', not an attribute with the name
# stored in the context variable of the name 'sortby'