如何将 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.labelwindow.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 端点。例如&lt;script&gt;window.foo = bar | json &lt;/script&gt; 然后在javascript 中访问window.foo

以上是关于如何将 Javascript 变量与 Jinja2 变量进行比较的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jinja2 在 GAE 中存储 Javascript 对象

如何在 Jinja2 的变量中嵌入变量?

在 Jinja2 中,如何测试变量是不是未定义?

如何在 jinja2 中使用 django 中的动态变量(variable.variable.variable)

使用 jinja2 时如何将新条目添加到字典对象中?

[学习记录]jinja2模板语法