Python Django模板和变量属性
我正在使用Google应用程序引擎和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
我有一个表,我想显示如下对象:
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 1b 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 }}
这是一个优雅的解决方案:我可以吻你