我知道的Jinja2库允许我从我的Python代码的HTML和如图所示in this example从HTML代码中访问这些数据通过数据存储模型。然而Jinja2与javascript不兼容,我想访问我的Javascript代码中的数据。什么是最简单的模板库允许在Javascript中迭代我的数据存储实体?我听说过Mustache和Jquery,我认为它们看起来有些复杂。有什么更简单的吗?传递谷歌App Engine数据存储模型的javascript代码
回答
它的工作原理。我不得不将序列化(转换)我的数据存储实体为json格式,该JavaScript很好理解。我创建了一个函数,将我的数据存储区的每个实例转换为一个dictionnary,然后将所有这些实例封装到一个列表中,然后使用json.dumps将其转换为Json。当我将这个结果传递给Java脚本时,我可以很容易地访问我的值,如下所示。
import json
import webapp2
from google.appengine.ext import db
import jinja2
JINJA_ENVIRONMENT = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
extensions=['jinja2.ext.autoescape'],
autoescape=True)
# serialize datastore model to JSON format
def serialize(model):
allInstances = model.all() # fetching every instance of model
itemsList = [] #initial empty list
for p in allInstances:
d = db.to_dict(p)
itemsList.append(d)
return json.dumps(itemsList)
class myModel(db.Model):
v = db.FloatProperty()
c = db.FloatProperty()
tdate = db.DateTimeProperty(auto_now_add=True)
class MainPage(webapp2.RequestHandler):
def get(self):
myModel(v=4.5, c=3.0).put()
#creating template variables
template_values = {
'json_data': serialize(myModel)
}
template = JINJA_ENVIRONMENT.get_template('index.html')
self.response.write(template.render(template_values))
里面我“的index.html”文件,我有:
{% autoescape true %}
<!DOCTYPE html>
<html>
<head>
<title> webpage </title>
<script type="text/javascript">
// I retrieve my data here
var results = "{{ json_data }}";
for(var i = 0; i < db_results.length; i++) {
document.write("myModel instance:" + i + results[i] + "<br>");
}
</script>
</head>
<body>
</body>
</html>
{% endautoescape %}
你应该创建一个python控制器供应JSON格式的数据,其中任何JavaScript库(尤其是jQuery的),可以从消费。然后,设置Jinja2模板以包含一些调用,加载和显示所述数据的Javascript。
它无关的兼容性。 Jinja是服务器端模板。您可以使用JavaScript进行客户端编码。
使用神社您可以创建HTML,可以通过像普通HTML JavaScript访问。 要将数据存储实体发送到客户端,您可以使用Jinja传递Python列表或使用json Web服务。
还有一种方法需要考虑:如果Python对象不是动态的,您可能希望使用json.dumps()将其存储为TextProperty,并且只需将JSON.parse(unescape(model_text))存储在JS端。减少开销和内存命中,这在尝试保持在F1限制内时可能很重要。例如,我运行一个非常容易在F1内运行的实例。有一个我们提供的大型字典对象。如果此对象作为实例中的Python字典存在,我们将因软内存限制而终止实例。使用TextProperty方法,我们可以将这个大字典传给客户端,而不会有任何问题。 (注意:在开始创建这个对象时,我们确实必须暂时将实例提升到F4 - 管理员网页中的内容非常简单。)使用更多动态对象时,上面的答案适用。
Jinja2和Javascript一起玩。您需要安排模板扩展将您的Python数据结构发布为适合JS的表单。
https://sites.google.com/a/khanacademy.org/forge/technical/autoescape-in-jinja2-templates覆盖它相当好。 (注意使用escapejs
过滤器)。
- 1. 谷歌App Engine数据存储迁移
- 2. 模型在谷歌App Engine数据存储
- 3. JDO和谷歌App Engine数据存储:在代码键表示
- 4. App Engine数据存储 - 数据模型
- 5. 谷歌App Engine数据存储串编码的问题
- 6. 云存储谷歌App Engine的文件
- 7. 谷歌App Engine的编码
- 8. 什么在谷歌App Engine的数据存储键字段
- 9. 查询奇怪的行为。谷歌App Engine数据存储
- 10. 谷歌App Engine的本地数据存储控制台
- 11. 与谷歌的App Engine数据存储使用和功能
- 12. Java的谷歌App Engine数据存储PUT/GET
- 13. 链接与谷歌的App Engine数据存储Android应用
- 14. 制作“或”在谷歌App Engine的数据模型
- 15. 谷歌App Engine数据存储查询问题
- 16. 实体不可被放入谷歌App Engine数据存储
- 17. 注册谷歌App Engine数据存储-primarykey
- 18. 谷歌App Engine数据存储非复合索引
- 19. Where子句中谷歌App Engine数据存储
- 20. 谷歌App Engine数据存储不支持操作+
- 21. 谷歌App Engine数据存储/ NoSQL示例与祖先查询
- 22. IllegalStateException与谷歌App Engine本地数据存储
- 23. 谷歌App Engine的PHP SDK - 谷歌云存储 - 上传的文件
- 24. 文件上传到谷歌云存储谷歌的App Engine(Python)的
- 25. 上传到谷歌云存储从Django的App Engine上
- 26. Google App Engine数据存储区编码?
- 27. 谷歌App Engine的数据存储问题:获取类型错误:试图插入到数据存储的
- 28. NULL属性类型获取更多尺寸:谷歌App Engine数据存储
- 29. App Engine数据存储模型的排名4人游戏
- 30. 新手App Engine数据存储的问题 - 模型和.filter()
是的,但是JavaScript可以这些元素内声明只能访问HTML元素和它们各自的属性不变量。也可以将jinja语法与html代码交错,以显示从它发送到网页的值。这不适用于js – df611
我试过传递一个python列表,但我无法从js访问这个列表。如果你能给我看一个非常好的例子 – df611
客户端的HTML不包含任何变量(比如Jinja代码)。我不明白你的意见? – voscausa