使用变量从Django中的数据库中提取数据

时间:2016-04-09 23:12:18

标签: python django

我正在基于文档页面“第一步”中的应用程序在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中指定的字段进行排序?

提前感谢菜鸟。

1 个答案:

答案 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'