Javascript 使用jinja2模板(列表和目录)将Python数据结构转换为js数据结构

Javascript 使用jinja2模板(列表和目录)将Python数据结构转换为js数据结构,javascript,python,list,jinja2,Javascript,Python,List,Jinja2,我有一个与这个问题非常相似的问题,但下一步是——python中的字符串变量名如何成为javascript对象 因此,在python中,我有以下内容: data=[{'year':2006,'books':54,'author':'fred'}, {'year':2007,'books':43,'author':'sue'}, {'year':2008,'books':41,'author':'bill'}, {'year':2009,'books':44,'author':'alex'}, {'

我有一个与这个问题非常相似的问题,但下一步是——python中的字符串变量名如何成为javascript对象

因此,在python中,我有以下内容:

data=[{'year':2006,'books':54,'author':'fred'},
{'year':2007,'books':43,'author':'sue'},
{'year':2008,'books':41,'author':'bill'},
{'year':2009,'books':44,'author':'alex'},
{'year':2010,'books':35,'author':'fred'}]
我可以通过{data | safe}将其输出到javascript中

但我希望我的javascript看起来像这样:

var data=[{年份:2006,书籍:54,作者:'fred'},
{年份:2007,书籍:43,作者:'苏'},
{年份:2008,书籍:41,作者:'比尔'},
{年份:2009,书籍:44,作者:'alex'},
{年份:2010,书籍:35本,作者:'fred'}];
然而,它是在这样的时刻出现的:

var data=[{'year':2006,'books':54,'author':'fred'},
{'year':2007,'books':43,'author':'sue'},
{'year':2008,'books':41,'author':'bill'},
{'year':2009,'books':44,'author':'alex'},
{'year':2010,'books':35,'author':'fred'}];
有什么办法可以这样做吗

非常感谢,, Mark

随附的Flask负责生成同样是HTML安全的有效Javascript子集:

var data = {{ data|tojson|safe }};
如果您不使用烧瓶,则如下所示:

导入json
def tojson(obj):
“”“生成HTML安全JSON”“”
返回(json.dumps(obj)
.替换(u'',u'\\u003e')
.替换(u'&',u'\\u0026')
.替换(u“”,u'\\u0027'))
随Flask附带的功能负责生成一个同样是HTML安全的有效Javascript子集:

var data = {{ data|tojson|safe }};
如果您不使用烧瓶,则如下所示:

导入json
def tojson(obj):
“”“生成HTML安全JSON”“”
返回(json.dumps(obj)
.替换(u'',u'\\u003e')
.替换(u'&',u'\\u0026')
.替换(u“”,u'\\u0027'))
随Flask附带的功能负责生成一个同样是HTML安全的有效Javascript子集:

var data = {{ data|tojson|safe }};
如果您不使用烧瓶,则如下所示:

导入json
def tojson(obj):
“”“生成HTML安全JSON”“”
返回(json.dumps(obj)
.替换(u'',u'\\u003e')
.替换(u'&',u'\\u0026')
.替换(u“”,u'\\u0027'))
随Flask附带的功能负责生成一个同样是HTML安全的有效Javascript子集:

var data = {{ data|tojson|safe }};
如果您不使用烧瓶,则如下所示:

导入json
def tojson(obj):
“”“生成HTML安全JSON”“”
返回(json.dumps(obj)
.替换(u'',u'\\u003e')
.替换(u'&',u'\\u0026')
.替换(u“”,u'\\u0027'))

解决方案是Martijn Pieters和traceur的组合,非常感谢:D

因此,代码的工作版本是:

在Python中:

data = [{'year': 2006, 'books': 54, 'author': 'fred'},
{'year': 2007, 'books': 43, 'author': 'sue'},
{'year': 2008, 'books': 41, 'author': 'bill'},
{'year': 2009, 'books': 44, 'author': 'alex'},
{'year': 2010, 'books': 35, 'author': 'fred'}]

....rest of code....

variables = {
    'data' : data
    }
template = JINJA_ENVIRONMENT.get_template('main.html')
self.response.write(template.render(variables))
除此之外,我还必须为jinja2注册一个新的JSON过滤器:

JINJA_ENVIRONMENT = jinja2.Environment(
  loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
  autoescape=True,
  extensions=['jinja2.ext.autoescape'])

def tojson(obj):
 """Produce HTML-safe JSON"""
  return (json.dumps(obj)
            .replace(u'<', u'\\u003c')
            .replace(u'>', u'\\u003e')
            .replace(u'&', u'\\u0026')
            .replace(u"'", u'\\u0027'))

JINJA_ENVIRONMENT.filters['tojson'] = tojson
JINJA_ENVIRONMENT=jinja2.ENVIRONMENT(
loader=jinja2.FileSystemLoader(os.path.dirname(_文件__)),
自动转义=真,
扩展=['jinja2.ext.autoescape'])
def tojson(obj):
“”“生成HTML安全JSON”“”
返回(json.dumps(obj)
.替换(u'',u'\\u003e')
.替换(u'&',u'\\u0026')
.替换(u“”,u'\\u0027'))
JINJA_环境。过滤器['tojson']=tojson
…然后在HTML中需要调用此过滤器以将其放置在javascript中,但也要根据traceur的注释进行评估。(我真的不知道为什么)


dataSource=eval(“({data | tojson | safe}})”
console.log(数据源)
…使用数据源做一些事情。。。。
dataSource现在是一个js对象,它的格式对于我的ChartJS可视化来说是正确的


非常感谢

解决方案是Martijn Pieters和traceur的组合,非常感谢:D

因此,代码的工作版本是:

在Python中:

data = [{'year': 2006, 'books': 54, 'author': 'fred'},
{'year': 2007, 'books': 43, 'author': 'sue'},
{'year': 2008, 'books': 41, 'author': 'bill'},
{'year': 2009, 'books': 44, 'author': 'alex'},
{'year': 2010, 'books': 35, 'author': 'fred'}]

....rest of code....

variables = {
    'data' : data
    }
template = JINJA_ENVIRONMENT.get_template('main.html')
self.response.write(template.render(variables))
除此之外,我还必须为jinja2注册一个新的JSON过滤器:

JINJA_ENVIRONMENT = jinja2.Environment(
  loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
  autoescape=True,
  extensions=['jinja2.ext.autoescape'])

def tojson(obj):
 """Produce HTML-safe JSON"""
  return (json.dumps(obj)
            .replace(u'<', u'\\u003c')
            .replace(u'>', u'\\u003e')
            .replace(u'&', u'\\u0026')
            .replace(u"'", u'\\u0027'))

JINJA_ENVIRONMENT.filters['tojson'] = tojson
JINJA_ENVIRONMENT=jinja2.ENVIRONMENT(
loader=jinja2.FileSystemLoader(os.path.dirname(_文件__)),
自动转义=真,
扩展=['jinja2.ext.autoescape'])
def tojson(obj):
“”“生成HTML安全JSON”“”
返回(json.dumps(obj)
.替换(u'',u'\\u003e')
.替换(u'&',u'\\u0026')
.替换(u“”,u'\\u0027'))
JINJA_环境。过滤器['tojson']=tojson
…然后在HTML中需要调用此过滤器以将其放置在javascript中,但也要根据traceur的注释进行评估。(我真的不知道为什么)


dataSource=eval(“({data | tojson | safe}})”
console.log(数据源)
…使用数据源做一些事情。。。。
dataSource现在是一个js对象,它的格式对于我的ChartJS可视化来说是正确的


非常感谢

解决方案是Martijn Pieters和traceur的组合,非常感谢:D

因此,代码的工作版本是:

在Python中:

data = [{'year': 2006, 'books': 54, 'author': 'fred'},
{'year': 2007, 'books': 43, 'author': 'sue'},
{'year': 2008, 'books': 41, 'author': 'bill'},
{'year': 2009, 'books': 44, 'author': 'alex'},
{'year': 2010, 'books': 35, 'author': 'fred'}]

....rest of code....

variables = {
    'data' : data
    }
template = JINJA_ENVIRONMENT.get_template('main.html')
self.response.write(template.render(variables))
除此之外,我还必须为jinja2注册一个新的JSON过滤器:

JINJA_ENVIRONMENT = jinja2.Environment(
  loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
  autoescape=True,
  extensions=['jinja2.ext.autoescape'])

def tojson(obj):
 """Produce HTML-safe JSON"""
  return (json.dumps(obj)
            .replace(u'<', u'\\u003c')
            .replace(u'>', u'\\u003e')
            .replace(u'&', u'\\u0026')
            .replace(u"'", u'\\u0027'))

JINJA_ENVIRONMENT.filters['tojson'] = tojson
JINJA_ENVIRONMENT=jinja2.ENVIRONMENT(
loader=jinja2.FileSystemLoader(os.path.dirname(_文件__)),
自动转义=真,
扩展=['jinja2.ext.autoescape'])
def tojson(obj):
“”“生成HTML安全JSON”“”
返回(json.dumps(obj)
.替换(u'',u'\\u003e')
.替换(u'&',u'\\u0026')
.替换(u“”,u'\\u0027'))
JINJA_环境。过滤器['tojson']=tojson
…然后在HTML中需要调用此过滤器以将其放置在javascript中,但也要根据traceur的注释进行评估。(我真的不知道为什么)


dataSource=eval(“({data | tojson | safe}})”
console.log(数据源)
…使用数据源做一些事情。。。。
dataSource现在是一个js对象,它的格式对于我的ChartJS可视化来说是正确的


非常感谢

解决方案是Martijn Pieters和traceur的组合,非常感谢:D

所以工作版本o