【问题标题】:How can I compare a Javascript Variable with Jinja2 variable如何将 Javascript 变量与 Jinja2 变量进行比较
【发布时间】: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" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 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 进行比较

【问题讨论】:

    标签: python jinja2 pyramid


    【解决方案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>
    

    引用:

    【讨论】:

    • 对不起,这不是我要找的。​​span>
    • @AniruddhAgarwal 缺少什么答案?
    • 对于我的用例来说,这是一个相当漫长的过程。顺便说一句,感谢您的努力,很好的答案!
    • 答案是正确的... jinja 在服务器上执行,javascript 在客户端的浏览器中执行。如果你想比较,那么你必须将jinja变量导入javascript,然后才能进行比较。最简单的方法是仅修改模板以将值放入脚本标记中,而不是编写单独的 ajax 端点。例如&lt;script&gt;window.foo = {{ bar | json }}&lt;/script&gt; 然后在javascript 中访问window.foo
    猜你喜欢
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 2017-01-12
    相关资源
    最近更新 更多