在Jinja2中,我有一个这样的基本模板:
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{% block title %}{% endblock %} - example.com
</h1>
Run Code Online (Sandbox Code Playgroud)
然后,Jinja2失败并显示以下消息:
lines = [self.message, ' ' + location]
: block 'title' defined twice
Run Code Online (Sandbox Code Playgroud)
现在必须明确我要做的事情 - 在两个地方拥有相同的标题:TITLE标签和H1标签,但标题的一部分实际上是由其他派生模板提供的.
人们通常如何实现这一目标?
我刚刚学习Jinja2.我之前从未做过任何模板,因此我发现文档现在非常混乱.
如何使用简单的FOR循环构建HTML表?我的模板看起来像这样:
{% for item in items %}
<TR>
<TD class="c1"><IMG src="favicon.ico"></TD>
<TD class="c2">{{date}}</TD>
<TD class="c3">{{id}}</TD>
<TD class="c4"><SPAN>{{position}}</SPAN></TD>
<TD class="c5"><SPAN>{{status}}</SPAN></TD>
</TR>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我的python代码如下所示:
import jinja2
loader = jinja2.FileSystemLoader('./index.html')
env = jinja2.Environment(loader=loader)
template = env.get_template('')
print template.render(date='2012-02-8', id='123', position='here', status='Waiting')
Run Code Online (Sandbox Code Playgroud)
我似乎无法生成任何表格.我也不知道这是否是填充具有多个字段的表的最佳方法.
在jinja文件中找到了一些:
</extension>
{%- else -%}
<extension name="blabla">
Run Code Online (Sandbox Code Playgroud)
并且
{% if freeswitch_dispatcher -%}
<extension name="hold_unhold">
Run Code Online (Sandbox Code Playgroud)
破折号?知道它的用途吗?
我从我的页面获得了以下html片段template.html.
<ul class='nav'>
<li class="active"><a href='/'>Home</a></li>
<li><a href='/lorem'>Lorem</a></li>
{% if session['logged_in'] %}
<li><a href="/account">Account</a></li>
<li><a href="/projects">Projects</a>
<li><a href="/logout">Logout</a></li>
{% endif %}
{% if not session['logged_in'] %}
<li><a href="/login">Login</a></li>
<li><a href="/register">Register</a></li>
{% endif %}
</ul>
Run Code Online (Sandbox Code Playgroud)
正如你在第2行看到的那样,这个类是活跃的.这突出显示了具有twitter bootstrap css文件的活动选项卡.现在,如果我要访问,这将工作正常www.page.com/但不是我访问时www.page.com/login的情况.它仍然会将主页链接突出显示为活动选项卡.
当然,我可以使用Javascript/jQuery轻松完成此操作,但在这种情况下我宁愿不使用它.
已经有一个工作解决方案为ruby on rails但我不知道如何将其转换为python/jinja(我对jinja/flask很新,从来没有使用ruby)
我如何将jinja2数据传递给javascript.我有一个Flask REST URL,因为/logs/<test_case_name>
我正在尝试.getJSON()查询上面的URL,因此希望传递具有testcasename .getJSON功能的jinja2数据.
示例代码:
<script type="text/javascript">
alert({{name}});
</script>
Run Code Online (Sandbox Code Playgroud)
它不起作用.有什么建议吗?
我有一个列表列表,如:
[[elem0, elem1, elem2], [elem3, elem4, elem5], [elem6, elem7, elem8], ...]
Run Code Online (Sandbox Code Playgroud)
我写了以下模板文件:
{% for result in results %}
<tr>
<td>result[0]</td>
<td>result[1]</td>
<td>result[2]</td>
</tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我能想到的是使用嵌套.是否有另一种方法来访问jinja列表中的元素?
从flask实现一个简单的静态站点,但浏览器说找不到模板,shell返回404
jinja2.exceptions.TemplateNotFound
TemplateNotFound: template.html
Run Code Online (Sandbox Code Playgroud)
主要的python代码:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def template_test():
return render_template('template.html', my_string="Wheeeee!", my_list=[0,1,2,3,4,5])
if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
我有以下文件结构:
flask_new_practice
|--template/
|--template.html
|--run.py
Run Code Online (Sandbox Code Playgroud) 如何突破jinja2中的for循环?
我的代码是这样的:
<a href="#">
{% for page in pages if page.tags['foo'] == bar %}
{{page.title}}
{% break %}
{% endfor %}
</a>
Run Code Online (Sandbox Code Playgroud)
我有多个具有此条件的页面,并且我想在条件满足后结束循环.
我在使用Jinja2渲染模板时尝试使用utf-8字符.以下是我的模板的样子:
<!DOCTYPE HTML>
<html manifest="" lang="en-US">
<head>
<meta charset="UTF-8">
<title>{{title}}</title>
...
Run Code Online (Sandbox Code Playgroud)
标题变量设置如下:
index_variables = {'title':''}
index_variables['title'] = myvar.encode("utf8")
template = env.get_template('index.html')
index_file = open(preview_root + "/" + "index.html", "w")
index_file.write(
template.render(index_variables)
)
index_file.close()
Run Code Online (Sandbox Code Playgroud)
现在,问题是myvar是从消息队列中读取的消息,可以包含那些特殊的utf8字符(例如"SéptimoCine").
渲染的模板看起来像:
...
<title>S\u00e9ptimo Cine</title>
...
Run Code Online (Sandbox Code Playgroud)
我希望它是:
...
<title>Séptimo Cine</title>
...
Run Code Online (Sandbox Code Playgroud)
我已经做了几次测试,但我不能让它工作.
我试图设置title变量而没有.encode("utf8"),但它抛出异常(ValueError:期望一个字节对象,而不是unicode对象),所以我的猜测是初始消息是unicode
我使用chardet.detect来获取消息的编码(它是"ascii"),然后执行以下操作:myvar.decode("ascii").encode("cp852"),但标题仍未正确呈现.
我还确保我的模板是UTF-8文件,但它没有什么区别.
关于如何做到这一点的任何想法?
我正在使用curl我的网络应用程序的输出.当Flask和Jinja渲染模板时,输出中会有很多不必要的空白区域.它似乎是通过渲染Flask-WTF和Flask-Bootstrap的各种组件来添加的.我可以使用它sed,但有没有办法从Jinja控制它?
jinja2 ×10
python ×7
flask ×4
class ×1
for-loop ×1
html ×1
javascript ×1
python-2.7 ×1
templates ×1
utf-8 ×1