如何将 Javascript 变量与 Jinja2 变量进行比较
Posted
技术标签:
【中文标题】如何将 Javascript 变量与 Jinja2 变量进行比较【英文标题】:How can I compare a Javascript Variable with Jinja2 variable 【发布时间】:2020-10-20 23:55:29 【问题描述】:我有一个基于金字塔的 jinja2 网站。我想将 jinja2 变量与存储在 window 对象中的 js 变量进行比较,有什么建议可以实现吗?
% for summary in dashboard_dict.summaries %
<div class="summary-list">
<div class="w-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke- stroke-linecap="round" stroke-linejoin="round" class="feather feather-shopping-bag"><path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"></path><line x1="3" y1="6" x2="21" y2="6"></line><path d="M16 10a4 4 0 0 1-8 0"></path></svg>
</div>
<div class="w-summary-details">
<div class="w-summary-info">
<h6>summary.label</h6>
<p class="summary-count" id="accordato-count">summary.value</p>
</div>
<div class="w-summary-stats">
<div class="progress">
<div class="progress-bar bg-gradient-secondary" role="progressbar" style="width: summary.value%" aria-valuenow="90" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</div>
</div>
</div>
% endfor %
我正在尝试将summary.label
与window.variable
进行比较
【问题讨论】:
【参考方案1】:根据我对 jinja 工作原理的了解,我过去在 (flask, django) 中所做的是将 window.variable 与 GET/PUT/POST 请求一起传递,然后在视图中处理它,然后然后将其传递给模板渲染,此时您将能够进行比较。
金字塔的例子:
from pyramid.view import view_config
@view_config(renderer='templates/summary-list.jinja2')
def dashboard(request):
# adding window_variable to dashboard_dict
return "window_variable": request.params.get('theVariable', 'default')
获取请求示例:
const url = new URL("http://127.0.0.1:8000/dashboard")
const url params = theVariable: window.variable
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]))
const resp = await fetch(url)
另一种可能性是将请求传递给 jinja(它可能已经默认完成,作为金字塔-jinja 标准上下文的一部分),或者您可以尝试手动完成:
from pyramid.view import view_config
@view_config(renderer='templates/summary-list.jinja2')
def dashboard(request):
# adding request to dashboard_dict
return "request": request
jinja模板中的用法示例:
<div>method 1:</div>
<h1>window_variable == summary.label</h1>
<div>method 2:</div>
<h1>request.params.get('theVariable', 'default') == summary.label</h1>
引用:
Setting query string using Fetch GET request https://docs.pylonsproject.org/projects/pyramid_jinja2/en/latest/【讨论】:
对不起,这不是我要找的。span> @AniruddhAgarwal 缺少什么答案? 对于我的用例来说,这是一个相当漫长的过程。顺便说一句,感谢您的努力,很好的答案! 答案是正确的... jinja 在服务器上执行,javascript 在客户端的浏览器中执行。如果你想比较,那么你必须将jinja变量导入javascript,然后才能进行比较。最简单的方法是仅修改模板以将值放入脚本标记中,而不是编写单独的 ajax 端点。例如<script>window.foo = bar | json </script>
然后在javascript 中访问window.foo
。以上是关于如何将 Javascript 变量与 Jinja2 变量进行比较的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jinja2 在 GAE 中存储 Javascript 对象