我有一个初始模板,其中包含以下代码建议的表单输入。
<form id="myForm" action="" method="post">
<div id="main" >
<input type="text" id="r0t0p1" name="r0t0p1" value="name1"></input>
</div>
</form>
在用户看到输入后,我使用javascript重新生成“修订”表单,如以下摘录所示。 javascript中的字典dict
已在Python中创建,以便在javascript重新生成时将更新的用户输入传递回模板。
var tT='';
tT += '<input type="text" id="r'+ r +'t'+ t + 'p1" name="r'+ r +'t'+ t + 'p1">{% raw %}{{ dict.r'+ r +'t'+ t + 'p1 }}{% endraw %}</input>'
我的问题是虽然dict
值已正确更新且ndb google数据存储区包含所有修改后的输入值,但“修改后的”javascript生成模板会被原始静态模板删除。我甚至可以在屏幕上看到正确修改的模板flash,但它会被原来的静态模板替换。
我该怎么做才能解决这个问题,以便修改后的信息仍然存在? 您可能需要更多信息,请询问。
编辑0
我放置了一个愚蠢的版本at jsfiddle.net,我注意到当“加载类型”是“onLoad”或“onDomready”时没有输出更新,但是如果“加载类型”是“没有包装”或“没有包装”然后结果更新。我不熟悉“加载类型”,但这些信息是否提示修复?点击Add a cell
或Add a row
即可在小提琴上练习应用。 (顺便说一下,我编辑了链接地址,因为我不知道链接地址中需要更新级别。)
此外,我的(检索和)创建屏幕的Python代码如下所示。我可以在此代码中更改某些内容吗?
class Host(BaseHandler):
def post(self,ID):
tables=int(self.request.get('tables'))
rounds=int(self.request.get('rounds'))
key = ndb.Key(Pages,ID,Parties,ID)
return webapp2.redirect("/host/%s" % ID)
def get(self, ID):
template_values = {'ID':ID, 'dict': dict}
template = JINJA_ENVIRONMENT.get_template('host.html')
self.response.out.write(template.render( template_values))
#self.render_template('host.html', {'ID': ID, 'dict': dict})
编辑0
答案 0 :(得分:0)
这只是部分答案(但见下文)。
通过向onbeforeunload="myFunction()"
元素添加<body>
事件,我清楚地看到当用户点击我的应用中的任何按钮时发生了卸载。卸载是触发我的静态原始模板重新加载和消除所需的&#34;修订&#34;我的问题中描述的模板。
我的<form>
元素会触发卸载,因此我将其删除并避免了冲突。但...
我仍然无法理解如何在数据存储中包含我的{{dict.xxxx}}
数据的值&#34;修订版&#34;模板。我没有看到每个{{dict.xxxx}}
的值,而是看到{{dict.xxxx}}
,大括号和全部。所以也许<form>
元素也可以检索数据存储区值,但我对此表示怀疑。所以我还在杂草丛中。
请提出建议(比如告诉我提出一个新问题)。
修改强>
完成答案:
我不再使用{{dict.xxxx}}
代码部分中的jinja2 <script>
,因为我无法完成这项工作。相反,在使用javascript和jinja的非<script>
部分中,我构建了一系列&#34;隐藏&#34; <input>
s,每个都包含字典中的一个项目,以及一个由字符串&quot; dict&#39;前缀构成的唯一ID。到每个数据的id。我在this link "Using data attributes"找到了一个想法。但我的方法使用了getattribute()
,因为该文章警告说,数据的功能在浏览器中并非普遍可用。