我对忍者来说比较新,所以请原谅这个可能愚蠢的问题......
我有一个jinja宏坐在名为import sys
from functools import partial
from PyQt4 import QtGui,QtCore
def move_scrollbar(vs, value):
vs.blockSignals(True)
vs.setValue(value)
vs.blockSignals(False)
def window():
app = QtGui.QApplication(sys.argv)
win = QtGui.QWidget()
main_horizontal = QtGui.QHBoxLayout()
verti_1 = QtGui.QVBoxLayout()
verti_2 = QtGui.QVBoxLayout()
list1 = QtGui.QListWidget()
for i in range(20):
list1.addItem(str(i))
list2 = QtGui.QListWidget()
for i in range(20):
list2.addItem("name" + str(i))
verti_1.addWidget(list1)
verti_2.addWidget(list2)
vs1 = list1.verticalScrollBar()
vs2 = list2.verticalScrollBar()
vs1.valueChanged.connect(partial(move_scrollbar, vs2))
vs2.valueChanged.connect(partial(move_scrollbar, vs1))
main_horizontal.addLayout(verti_1)
main_horizontal.addLayout(verti_2)
win.setLayout(main_horizontal)
win.resize(400,200)
win.show()
sys.exit(app.exec_())
if __name__ == "__main__":
window()
的文件中,如下所示
const input = {
artists: [
{
name: 'Martin Garrix',
origin: 'Netherlands',
age: '22 years old',
artist_id: 'c0dc129d8a886a2c9bf487b826c3614a6630fb9c',
best_song:
'https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/98081145&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true',
},
{
name: 'Armin van Buuren',
origin: 'Netherlands',
age: '41 years old',
artist_id: '8b0a178ce06055312456cccc0c9aa7679d8054f1',
best_song:
'https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/181749728&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true',
},
{
name: 'Don Diablo',
origin: 'Netherlands',
age: '38 years old',
artist_id: '178c6e7e3bf24710d4895048586a86f1bb81d842',
best_song:
'https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/212802517&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true',
},
{
name: 'David Guetta',
origin: 'France',
age: '50 years old',
artist_id: 'c2714423228a8012ad37af0186447cbb7ff589f7',
best_song:
'https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/140006470&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true',
},
{
name: 'Alesso',
origin: 'Sweden',
age: '26 years old',
artist_id: '69fa09f6e181093fe0ea2ce1a4099066509f7837',
best_song:
'https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/288914798&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true',
},
],
};
const minAge = 40;
const output = input.artists.filter(cur => minAge < parseInt(cur.age));
console.log(output);
我从另一个名为lib.jinja
的文件中导入它,其大致如下所示:
{% macro some_macro(some_content) %}
<div class="some_class">{{ some_content }}</div>
{%- endmacro %}
渲染输出如下所示:
content.htm
请注意,内容显示两次,一次通过宏呈现,另一次 - 直接在上面 - 呈现,就像它在{% from "lib.jinja" import some_macro %}
{% block content %}
Some content
{% endblock %}
{{ some_macro(self.some_macro(self.content())) }}
中名为内容的块中定义的那样。我希望避免将块渲染两次 - 它应该被输入宏并仅通过它渲染。
我似乎可以&#34;解决问题&#34;将Some content
<div class="some_class">Some content</div>
转换为空基础模板的子模板(通过在其顶部添加content.htm
标记)。
也许我对这里的概念缺乏了解:一个块不是变量 - 我明白了。如果没有content.htm
标记,我会假设模板被视为基本模板。如果没有子模板或其他指令,我想该块只是按原样呈现,然后,第二次可以这么说,由宏拾取 - 正确吗?
我怎样才能以理智的方式解决这个问题,即如何通过扩展空基础模板来处理这个问题?是否有其他类型的块或变量可以满足我的需求?
答案 0 :(得分:0)
在我提交此问题后,我终于在手册中找到了我想要的内容:Block Assignments。
{% from "lib.jinja" import some_macro %}
{% set content %}
Some content
{% endset %}
{{ some_macro(self.some_macro(content)) }}
set
和endset
代码解决了我的问题。