Python Django模板和变量属性

Python Django模板和变量属性,python,django,google-app-engine,Python,Django,Google App Engine,我正在使用Google应用程序引擎和Django模板。 我有一个表,我想显示如下对象: Object Result: Items = [item1,item2] Users = [{name='username',item1=3,item2=4},..] Django模板是: <table> <tr align="center"> <th>user</th> {% for item in result.items

我正在使用Google应用程序引擎和Django模板。
我有一个表,我想显示如下对象:

Object Result:
    Items = [item1,item2]
    Users = [{name='username',item1=3,item2=4},..]
Django模板是:

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

用户
{result.items%中的项的%s}
{{item}}
{%endfor%}
{result.users%中的用户为%s}
{{user.name}
{result.items%中的项的%s}
{{user.item}
{%endfor%}
{%endfor%}
现在,当它在变量
中看到
它尝试了几种方法来获取数据,其中之一是字典查找,这正是我想要的,但似乎没有发生…

我假设不起作用的部分是
{{user.item}

Django将尝试字典查找,但使用字符串
“item”
,而不是
item
循环变量的值。Django在将
{{user.name}
解析为
user
对象的
name
属性时做了同样的事情,而不是查找名为
name
的变量

我认为在模板中呈现数据之前,您需要对视图中的数据进行一些预处理。

这不应该:

{{ user.item }}
是这个吗

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

我找到了一个“更好的”/“更好的”解决方案,用于将变量放入其中 这不是最好的方法,但它很有效

您在django中安装了一个自定义过滤器,它将dict的键作为参数

要在google app engine中工作,您需要在主目录中添加一个文件, 我叫我的django_hack.py,其中包含这段代码

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)
现在我们有了这个文件,我们需要做的就是告诉应用程序引擎使用它。。。 我们通过将这一小行添加到主文件中来实现这一点

webapp.template.register_template_library('django_hack')
并在模板视图中添加此模板,而不是通常的代码

{{ user|hash:item }}
而且它应该工作得很好=)

@davewebb(我的评价还不够高,还没有发表评论)

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

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

系统使用第一种有效的查找类型。这是一种短路逻辑。

用django模板替换googleappengine上user.items中的k,v,其中user={'a':1'b',2'c',3}

{% for pair in user.items %}
   {% for keyval in pair %} {{ keyval }}{% endfor %}<br>
{% endfor %}
{%for user.items%}
{%forKeyVal对%}{{keyval}{%endfor%}
{%endfor%}
a 1
b 2
C3


pair=(键,值)用于每个字典项。

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

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
那就行了

在模板中:

{{ user|hash:item }}

这是一个优雅的解决方案:我可以吻你