繁体   English   中英

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

[英]Using a variable to extract data from a database in Django

我在Django上使用文档页面“第一步”中基于该应用的sqlite数据库中的“项目”和“字符”创建了一个小型站点。 这些表(当前)遵循类似的格式,因此我想尝试制作一个灵活的模板。 在我的views.py中,两个视图的设置如下:

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))

唯一的区别是sortby变量和directory变量。 问题是,我想按字母的姓氏对字符进行排序,并按名称对项进行排序。 这个问题出现在我的模板中,特别是data.sortby:

{% if data_list %}
    <ul>
        {% for data in data_list %}
            <li><a href="{{data.id}}/">{{data.sortby}}</a></li>
        {% endfor %}
    </ul>
{% else %}
    <p>No characters,</p>
{% endif %}

如果我手动引用了我想要的不带方括号的字段,则它可以正常工作,因此,我确定这是导致问题的字符串。 如何按在views.py中指定的字段排序?

预先感谢菜鸟。

您可以在这个(有点过时的) 答案中得到一个想法,但最重要的是,Django模板中没有内置的通过名称getattr() -style访问属性的方法。 因此,您需要编写一个自定义过滤器,如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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM