【问题标题】:Does Jinja2 Work in Javascript?Jinja2 在 Javascript 中工作吗?
【发布时间】:2012-09-10 00:55:34
【问题描述】:

我已经尝试让它工作很长时间了:

{% for record in records %}

var GPSlocation = "(37.7699298, -93.4469157)";
var LatLng = GPSlocation.replace("(", "").replace(")", "").split(", ")
var Lat = parseFloat(LatLng[0]);
var Lng = parseFloat(LatLng[1]);

var markerLatlng = new google.maps.LatLng(Lat, Lng);

var marker = new google.maps.Marker({
    position: record.GPSlocation,
    title: record.title
});

//add the marker to the map
marker.setMap(map);

{% endfor %}

当我在其中对变量进行硬编码时,它工作得很好,但否则我不会做任何事情。当我只是在 html 中将它们打印出来时,我在记录变量中拥有了我想要的所有数据,但是当我尝试在 JavaScript 中使用它时,它就不起作用了。有什么想法吗?

所以我需要在 Jinja2 系统上放置一个 JSON 编码过滤器,我猜它看起来像这样:

jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir),
                           jinja_env.filters['json_encode'] = json.dumps,
                           autoescape = True)

【问题讨论】:

  • 示例中没有使用record。目前尚不清楚您的问题是什么,或者您要完成什么。另请注意,javascript 不会与模板标记交互。
  • @Marcin 哎呀抱歉,我刚刚复制了我的硬编码版本,但我刚刚修复了它。我正在尝试访问记录的属性来设置标记值
  • 如果 Javascript 不与 jinja2 标记语言交互,您建议如何在其中获取该信息?
  • 正如 icktoofay 向您展示的那样,您必须评估标记变量才能将其值粘贴到您生成的 javascript 中。

标签: javascript python google-maps-api-3 jinja2


【解决方案1】:

是的,但不是那样的。您可以改为执行以下操作:

{% for record in records %}
addRecord({
    title: {{ title|json_encode }}, // assuming you have json_encode set up as a filter
    position: {
        latitude: {{ record.position.latitude|json_encode }},
        longitude: {{ record.position.longitude|json_encode }}
    }
});
{% endfor %}

【讨论】:

  • 如何将 json_encode 设置为过滤器?我在谷歌上找不到任何东西
  • 导入 json 模块后,在您创建 Jinja2 环境(此处命名为 jinja_env)之后:jinja_env.filters['json_encode'] = json.dumps
  • 我在代码中添加了我的代码更改。这就是你想说的吗?它告诉我我有一个括号错误,但我尝试了一些变体但没有成功
  • @clifgray: 抱歉,我的意思是在结束)jinja2.Environment 的调用之后上线
  • 啊,好的,谢谢。所以我几乎让它工作了,我一直在查找它,但 JSON 正在吐出一个“"”在字符串的开头和结尾。知道如何解决这个问题吗?
猜你喜欢
  • 2011-10-28
  • 2014-12-14
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2022-10-04
  • 2022-08-07
  • 1970-01-01
相关资源
最近更新 更多