静态模板和javascript模板碰撞,静态获胜

时间:2018-02-17 22:20:28

标签: javascript python

我有一个初始模板,其中包含以下代码建议的表单输入。

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

1 个答案:

答案 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(),因为该文章警告说,数据的功能在浏览器中并非普遍可用。