我如何在jinja2中html-escape危险的unsanitized输入?
我可以在模板中执行它还是必须在python代码中完成?
我有一个可能包含da <ngero> u&s字符的变量.我如何在jinja2中逃脱它
我真的很喜欢django/jinja2模板语言.它们的语法非常简单,而且功能多样.在javascript中是否有类似于语法和功能的内容,或者如果不是两者,至少在功能方面.
我查看了下划线,jquery模板和小胡子模板,但它们似乎都不是我想要的.
补充说明
我认为所有的库(我看过)胡子是最好的,但我不喜欢语法.例如这个胡子模板
{{#people}}
{{name}}
{{/people}}
{{^people}}
No people :(
{{/people}}
Run Code Online (Sandbox Code Playgroud)
与django的模板相比:
{% for person in people %}
{{ person.name }}
{% empty %}
No people :(
{% endfor %}`
Run Code Online (Sandbox Code Playgroud)
应用过滤器也是一样的.例如:
{{#filter}}{{value}}{{/filter}}
Run Code Online (Sandbox Code Playgroud)
VS
{{ value|filter }}
Run Code Online (Sandbox Code Playgroud)
我认为django/jinja2方法更干净,感觉更自然.
那么,是否有任何js库的模板与django/jinja非常相似?如果没有,我想我必须忍受muschache(或者其他一些好的js库 - 我愿意接受建议),但它感觉不对.
谢谢.
javascript jquery template-engine language-comparisons jinja2
我正在使用Jinja2作为通过Python脚本生成的静态HTML网站的模板引擎.
我想在布局模板中重复一个块的内容,如下所示:
<html>
<head>
<title>{% block title %}{% endblock %} - {{ sitename }}</title>
</head>
<body>
<h1>{% block title %}{% endblock %}</h1>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
此模板将在页面模板中进行扩展,如下所示:
{% extends "layout.html" %}
{% block title %}Page title{% endblock %}
{% block content %}
Here goes the content
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
但是,这不能像我预期的那样工作,导致错误:
jinja2.exceptions.TemplateAssertionError: block 'title' defined twice
Run Code Online (Sandbox Code Playgroud)
金贾解释第二{% block title %}中的layout.html作为一个块重新定义.
如何使用jinja2在同一模板中重复块的内容?
有没有办法在Jinja2/Flask中打印当前的URL?
例如,如果当前URL是 http://www.domain.com/example/1/2
{{ request.path }}工作和打印/example/1/2,但如何获得http://的完整URL?
从文档(这里){{ request.url }}应该工作,但它不会产生任何东西.
谢谢
UPDATE
以下是来自views.py的渲染/上下文args:
class EventDetailView(EventObjectMixin, FormView):
template_name = 'gig/public/about.html'
context_object_name = 'event'
form_class = EventPurchaseTicketForm
def get_context_data(self, **kwargs):
context = super(EventDetailView, self).get_context_data(**kwargs)
...
return context
Run Code Online (Sandbox Code Playgroud) Django创建可重用模板的方法是什么?
示例:假设我的很多页面都包含"最新消息"框并遵循DRY原则,我想定义一次并在其他页面中重复使用它.我如何使用Django(或Jinja2)模板执行此操作?
阅读Django的模板文档我得到的结论是Django模板提供了"自上而下"的继承,其中子模板本身决定了它将嵌入哪个超模板:
<!-- Super-template (not valid, for illustration): -->
<html>
<head><title>Title</title></head>
<body>{% block content %}{% endblock %}</body>
</html>
Run Code Online (Sandbox Code Playgroud)
<!-- Sub-template: -->
{% extends "base.html" %}
{% block content %}
<div class="latest-news">News</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
那么在几个地方重用块(子模板)的技术是什么?
我正在学习jinja2,因为Google App Engine推荐它.
我在维基百科上找到了这个例子:http://en.wikipedia.org/wiki/Jinja_%28template_engine%29
{%- for item in item_list %}
{{ item }}{% if not loop.last %},{% endif %}
{%- endfor %}
Run Code Online (Sandbox Code Playgroud)
"{% - for"中的" - "是什么?
另外,我在哪里可以找到jinja2示例(使用Google App Engine更好)?
非常感谢!
有没有办法将python字典打印到HTML中的表中.我有一个python字典,并通过使用发送到HTML
return render_template('index.html',result=result)
Run Code Online (Sandbox Code Playgroud)
现在我需要将结果字典中的元素作为表打印到HTML中.
目前,对于文章中的每篇文章,都会创建一个类为span4的新div.相反,对于每一行,我想将其内容限制为三个跨度,并在达到该限制后创建一个新行.我怎样才能最好地实现这一点?
{% extends "base.html" %}
{% block content %}
<div class="container-fluid">
<legend></legend>
<div class="row-fluid" id="main">
{% for article in articles %}
<div class="span4">
<div class="thumbnail">
<a href="{{ article.url }}"><img src="http://placehold.it/300x150/483CB4"></a>
<div class="caption">
<h4><a href="{{ article.url }}">{{ article.title }}</a></h4>
<p> {{ article.summary }}</p>
</div>
<legend></legend>
<a class="btn" href="#"><i class="icon-thumbs-up"></i></a>
<a class="btn" href="#"><i class="icon-thumbs-down"></i></a>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
目标:
<div class="row">
<div class="span4">article[0]</div>
<div class="span4">article[1]</div>
<div class="span4">article[2]</div>
</div>
<div class="row">
<div class="span4">article[3]</div>
<div class="span4">article[4]</div>
<div class="span4">article[5]</div> …Run Code Online (Sandbox Code Playgroud) 模板看起来像这样:
solr.replication.master=
{% if ansible_eth0.ipv4.address == servermaster.eth0 %}
false
{% else %}
true
{% endif %}
solr.replication.slave=false
Run Code Online (Sandbox Code Playgroud)
输出应该如下所示:
solr.replication.master=true
solr.replication.slave=false
Run Code Online (Sandbox Code Playgroud)
我实际得到的是:
solr.replication.master=truesolr.replication.slave=false
Run Code Online (Sandbox Code Playgroud)
据我所知,Jinja2剥离了空格,而且ansible可能默认配置了这个.但它似乎没有荣誉 - /+空白标签.
有没有办法强制换行?
我正在努力解决在Ansible模板中拉动库存变量的模式,请帮忙.:)
我正在设置一个监控服务器,我希望能够使用Ansible自动配置服务器.我正在努力学习模板中的循环以允许我这样做.
到目前为止,我的半工作解决方案是在调用我所拥有的模板任务的剧本中:
monitoringserver.yml
vars:
servers_to_monitor:
- {cname: web1, ip_address: 192.168.33.111}
- {cname: web2, ip_address: 192.168.33.112}
- {cname: db1, ip_address: 192.168.33.211}
- {cname: db2, ip_address: 192.168.33.212}
Run Code Online (Sandbox Code Playgroud)
template.yml
all_hosts += [
{% for host in servers_to_monitor %}
"{{ host.cname }}{{ host.ip }}|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
{% endfor %}
]
Run Code Online (Sandbox Code Playgroud)
但这并不理想,因为我无法为要监控的不同服务器定义不同的IP地址.其他人怎么做到这一点?我敢肯定它一定是微不足道的,但我的大脑正在努力学习语法.
谢谢
艾伦
编辑:澄清生成的模板看起来像这样:
all_hosts += [
"web1|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
"web2|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
"db1|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
"db2|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
]
Run Code Online (Sandbox Code Playgroud)
我想要的是web1/web2/db1/db2的值是不同的,这取决于我使用的是生产清单文件还是开发清单文件.