关于python:Django模板和变量属性

关于python:Django模板和变量属性

Django templates and variable attributes

我正在使用Google App Engine和Django模板。
我有一个想要显示对象的表,如下所示:

1
2
3
Object Result:
    Items = [item1,item2]
    Users = [{name='username',item1=3,item2=4},..]

Django模板为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<table>
<tr align="center">
    <th>user</th>
    {% for item in result.items %}
        <th>{{item}}</th>
    {% endfor %}
</tr>

{% for user in result.users %}
    <tr align="center">
        <td>{{user.name}}</td>
        {% for item in result.items %}
            <td>{{ user.item }}</td>
        {% endfor %}
    </tr>
{% endfor %}
</table>

现在Django文档记录说,当它看到一个时。在变量中
它尝试几种方法来获取数据,其中之一是字典查找,这正是我想要的,但似乎没有发生...


我找到了一种在内部获取变量的"更好" /"更好"的解决方案
它不是最好的方法,但是可以。

您将自定义过滤器安装到django中,该过滤器将字典的键作为参数

要使其在Google App引擎中运行,您需要将文件添加到主目录中,
我叫我的django_hack.py,其中包含这段小代码

1
2
3
4
5
6
7
8
9
10
11
from google.appengine.ext import webapp

register = webapp.template.create_template_register()

def hash(h,key):
    if key in h:
        return h[key]
    else:
        return None

register.filter(hash)

现在我们有了这个文件,我们需要做的就是告诉应用程序引擎使用它...
我们通过在主文件中添加这一行来实现这一目的

1
webapp.template.register_template_library('django_hack')

,然后在您的模板视图中添加此模板,而不是通常的代码

1
{{ user|hash:item }}

它应该完美工作=)


我假设无效的部分是{{ user.item }}

Django将尝试字典查找,但使用字符串"item"而不是item循环变量的值。 Django将{{ user.name }}解析为user对象的name属性时,执行了相同的操作,而不是查找名为name的变量。

我认为您需要先对视图中的数据进行一些预处理,然后再将其呈现在模板中。


或者您可以使用默认的django系统,该系统用于解析临时模板中的属性,如下所示:

1
2
3
4
5
6
7
8
9
from django.template import Variable, VariableDoesNotExist
@register.filter
def hash(object, attr):
    pseudo_context = { 'object' : object }
    try:
        value = Variable('object.%s' % attr).resolve(pseudo_context)
    except VariableDoesNotExist:
        value = None
return value

那行得通

在您的模板中:

1
{{ user|hash:item }}

@Dave Webb(我的评价还不够高,无法发表评论)

点查找可以总结如下:当模板系统遇到变量名称中的点时,它将按以下顺序尝试以下查找:

1
2
3
4
* Dictionary lookup (e.e., foo["bar"])
* Attribute lookup (e.g., foo.bar)
* Method call (e.g., foo.bar())
* List-index lookup (e.g., foo[bar])

系统使用第一个有效的查找类型。 Ita的短路逻辑。


使用Django模板替换Google App Engine上user.items中的k,v,其中user = {'a':1,'b',2,'c',3}

1
2
3
{% for pair in user.items %}
   {% for keyval in pair %} {{ keyval }}{% endfor %}
{% endfor %}

a 1
b 2
c 3

每个字典项的

pair =(键,值)。


不应该这样:

1
{{ user.item }}

是这个吗?

1
{{ item }}

该循环中的上下文中没有用户对象....?


推荐阅读

    linux命令逐页显示?

    linux命令逐页显示?,系统,工作,地址,命令,网上,信息,百度,基础,标准,内容,在l

    linux命令多显示几行?

    linux命令多显示几行?,实时,系统,标准,数据,档案,命令,文件,最新,信息,状态,l

    linux用命令显示键盘?

    linux用命令显示键盘?,系统,信息,工具,电脑,键盘,分析,设备,数据,通用,工作,L

    linux命令查看包属性?

    linux命令查看包属性?,时间,系统,信息,状态,命令,文件,通讯录,管理,情况,标

    linux命令分行显示?

    linux命令分行显示?,数据,分行,系统,时间,最新,百度,实时,命令,文件,内容,lin

    linux显示路径命令?

    linux显示路径命令?,系统,信息,工作,数据,名称,位置,标准,环境,时间,命令,lin

    linux简单的显示命令?

    linux简单的显示命令?,工具,管理,系统,档案,工作,信息,命令,标准,技术,设备,L

    linux显示用户名命令?

    linux显示用户名命令?,密码,系统,信息,时间,地址,命令,用户,用户名,位置,用

    linux下命令显示行号?

    linux下命令显示行号?,工作,地址,系统,信息,命令,档案,文件,名称,观察,实时,L

    linux命令行最多显示?

    linux命令行最多显示?,信息,系统,数据,档案,标准,文件,命令,名称,地址,最新,l

    linux变量是一个命令?

    linux变量是一个命令?,系统,信息,变量,名称,官网,地址,环境,代码,地方,命令,$

    linux只显示命令行?

    linux只显示命令行?,系统,密码,工具,终端,信息,暂停,地方,代码,发行,首页,Lin

    linux全屏显示命令?

    linux全屏显示命令?,系统,工具,电脑,软件,数据,上会,环境,位置,虚拟机,分辨

    linux命令框显示乱码?

    linux命令框显示乱码?,系统,信息,环境,软件,项目,情况,乱码,中文,终端,字符

    linux中变量取余命令?

    linux中变量取余命令?,地址,工作,系统,数据,信息,命令,分析,目录,控制台,文

    linux显示到屏幕命令?

    linux显示到屏幕命令?,工具,命令,地址,标准,系统,名字,技术,最新,工作,信息,

    linux命令显示翻页?

    linux命令显示翻页?,地址,工作,命令,标准,管理,环境,系统,信息,暂停,文件,Lin

    linux显示硬盘命令?

    linux显示硬盘命令?,系统,情况,信息,单位,服务,命令,数据,工具,地址,管理,怎

    linux命令显示总大小?

    linux命令显示总大小?,系统,情况,信息,命令,单位,服务,第一,档案,大小,文件

    linux关机显示命令行?

    linux关机显示命令行?,系统,工作,命令,时间,级别,终端,用户,进程,方法,左边,l