【问题标题】:How to include javascript place holder in Jinja 2 place holder?如何在 Jinja2 占位符中包含 javascript 占位符?
【发布时间】:2018-08-29 18:24:57
【问题描述】:

我正在尝试将此功能嵌入到我的 Flask 应用程序中 --> Scattered Polaroid Gallery

所以,我有一个模板 (Jinja2),我在其中显示一堆图像。要访问图像,我正在使用 Flask 的 url_for() 命令,该命令使用符号 ---> {{}}。在应该动态加载图像的 Javascript 文件中,使用了相同的符号,即----> {{}}。我想知道如何将 Javascript 的 {{}} 与 Flask/Jinja 2 {{}}

一起使用

下面是用实际文件名替换 {{img}} 的每个实例的 Javascript 函数。

function addPhotos() {
  var template = select('#wrap').innerHTML;
  var html = [];
  var nav = [];
  for (i=0; i<1; i++) {
    
    var _html = template.replace('{{index}}', i)
    .replace('img', data[i].img)
    .replace('{{caption}}', data[i].caption)
    .replace('{{desc}}', data[i].desc);
    html.push(_html);
    nav.push('<span id="nav_'+i+'" class="i" onclick ="turn(select(\'#photo_'+i+'\'))">&nbsp;</span>');
  }
  html.push('<div class="nav">'+nav.join('')+'</div>');
  select('#wrap').innerHTML = html.join('');
  sort(random([0, data.length]));
}
<div class="mainPage" id="fullpage">
    <div class="first section">
        <div class="wrap" id="wrap">
            <div class="photo photo_front" id="photo_{{index}}" onclick="turn(this)">
                <div class="photo-wrap">
                    <div class="side side-front">
                        <p class="image">
                            <!-- <img src="photo/{{img}}"> -->
                            <img src="{{ url_for('static',filename='photo/{{img}}') }}">
                             <!-- .replace('{{img}}', data[i].img) -->
                        </p>
                        <p class="caption">{{caption}}</p>
                        
                    </div>
                    <div class="side side-back">
                        <p class="desc">{{desc}}</p>
                    </div>
                </div>
            </div>
        </div>
    </div>

以上是同时使用 Javascript 和 Jinja2 {{}} 的模板。

Chrome 调试控制台中显示以下错误。

以下是我的 Flask 应用程序的文件夹结构 -

PS - 我已经尝试使用图像文件夹的相对路径而不是 url_for() 函数来表示 ex-&lt;img src="../static/photo/{{img}}"&gt;,但它也失败了。

在这种情况下,显示以下错误-

请帮忙。

编辑 -

使用&amp;quot;后出现如下错误。

【问题讨论】:

    标签: javascript jquery html flask jinja2


    【解决方案1】:

    您需要使用引号转义大括号。由于您需要在 html 属性 src 中执行此操作,因此您还必须转义这些引号,因为 HTML 属性中已经使用了引号,而实现此目的的方法是使用 &amp;quot;

    看看下面的img标签src属性。如果您想转义不属于 HTML 属性的 Jinja 花括号,则可以使用 jinja {% raw %} 块(请参阅我如何包围 {{caption}}

    <div class="mainPage" id="fullpage">
        <div class="first section">
            <div class="wrap" id="wrap">
                <div class="photo photo_front" id="photo_{{index}}" onclick="turn(this)">
                    <div class="photo-wrap">
                        <div class="side side-front">
                            <p class="image">
    
                                <img src="{{ url_for('static',filename='photo/&quot;{{img}}&quot;') }}">
    
                            </p>
                            <p class="caption">{% raw %}{{'caption'}}{% endraw %}</p>
    
                        </div>
                        <div class="side side-back">
                            <p class="desc">{% raw %}{{desc}}{% endraw %}</p>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    

    【讨论】:

    • 好的,我试过了,但它看起来像 "不管用。我已在上传部分编辑了新的错误消息。
    • 好的,我认为您的错误与您描述的问题无关。您的 JavaScript 代码在替换 {{img}} 之前失败。看起来您的 select('#wrap') 为 null 并且您在“null”上调用 select('#wrap').className 您需要先解决此错误,然后在不使用 &amp;quote; 的情况下重试
    • 好的所以我已经让它以某种方式工作了。我会更新答案。您关于使用转义序列的意见非常有帮助。我使用 {% raw %} 这是 jinja2 的转义命令来实现相同的目的。我会接受你的回答,因为它间接导致我解决它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2021-01-12
    • 2013-09-13
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多