我想转换一个通过url传递给模板的int,但是它表示str函数没有定义.
我该如何解决这个问题?
这是我的代码:
{% extends "base.html" %}
{% block content %}
{% for post in posts %}
{% set year = post.date.year %}
{% set month = post.date.month %}
{% set day = post.date.day %}
{% set p = str(year) + '/' + str(month) + '/' + str(day) + '/' + post.slug %}
<h3>
<a href="{{ url_for('get_post', ID=p) }}">
{{ post.title }}
</a>
</h3>
<p>{{ post.content }}</p>
{% else: %}
There's nothing here, move along.
{% endfor %} …Run Code Online (Sandbox Code Playgroud) 我正在使用Google App Engine开发一个小应用程序,该应用程序使用Quora RSS提要.有一个表单,根据用户输入的输入,它将输出与输入相关的链接列表.现在,应用程序适用于单个字母查询和大多数双字母单词,如果单词用' - '分隔.但是,对于三个字母的单词和一些双字母单词,我收到以下错误:
UnicodeDecodeError:'ascii'编解码器无法解码位置48中的字节0xe2:序数不在范围内(128)
这是我的Python代码:
import os
import webapp2
import jinja2
from google.appengine.ext import db
import urllib2
import re
template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape=True)
class Handler(webapp2.RequestHandler):
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
def render_str(self, template, **params):
t = jinja_env.get_template(template)
return t.render(params)
def render(self, template, **kw):
self.write(self.render_str(template, **kw))
class MainPage(Handler):
def get(self):
self.render("formrss.html")
def post(self):
x = self.request.get("rssquery")
url = "http://www.quora.com/" + x + "/rss"
content = urllib2.urlopen(url).read()
allTitles = re.compile('<title>(.*?)</title>')
allLinks = …Run Code Online (Sandbox Code Playgroud) 我正在使用html,css,flask和jinja2创建一个网站.
我有一个页面在烧瓶服务器上工作,显示按钮和标签等,但我没有加载我的CSS样式表.
如何将样式表链接到jinja2模板.我在互联网上环顾四周,但无法找到方法.
这是css样式表链接; 我应该改变这个,还是python代码?
<link rel="stylesheet" type="text/css" href="styles.css">
这是我的烧瓶代码:
@app.route('/')
def resultstemplate():
return render_template('questions.html', head='Welcome!')
Run Code Online (Sandbox Code Playgroud)
这是文件的位置:
/python-code.py
/templates/template.html
/templates/styles.css
当我在Google App Engine中运行Jinja2时,我得到了无用的调试信息.我收集这是因为FAQ中的这个项目:
我的追溯看起来很奇怪.发生了什么?
如果未编译speedups模块并且您使用的是没有ctypes的Python安装(没有ctypes的Python 2.4,Jython或Google的AppEngine),Jinja2无法提供正确的调试信息,并且回溯可能不完整.目前没有针对Jython或AppEngine的良好解决方法,因为ctypes在那里不可用,并且不可能使用speedups扩展.
虽然目前没有"良好"的解决方法,是否有任何解决方法,以便在出现异常时打印的信息可以更有帮助?
谢谢你的阅读.
布赖恩
我正在尝试将jQuery模板插入到Jinja2模板中.唉,他们(在默认设置中)分别使用胡须{{和}}表示表达式和文字.
我将我的jQuery模板插入带有script标签的HTML中,如下所示:
<script type='text/x-jquery-template'>
<div>The people are:
{{ each people }}
${$value}
{{ /each }}
</div>
</script>
Run Code Online (Sandbox Code Playgroud)
然而,如果上面是Jinja模板,它就会因为Jinja试图将其解释each为文字而贬低.
在这种情况下(我们已经有很多模板),改变Jinja2的变量开始和结束分隔符是不切实际的.此外,它令人困惑,降低了互操作性,并需要额外的培训.最好避免使用此选项.
所以我想到的两个替代方案就是:
Jinja2逃避每个'{{'和'}}',我不太确定如何做得最好("{{"{{"}}`,也许,但这很冗长);
更实际 - 也许是理想的 - 会告诉Jinja2 不要解析代码块,也许是通过jQuery扩展.
我很感激你的想法和反馈.谢谢你的阅读.
Django有一个有用的{% spaceless %}标记,可以从HTML中删除额外的空格.
我的模板产生了很多空白,添加{%-和处理-%}空白控制的地方太麻烦了.有没有人看过类似于{% spaceless %}Jinja 的过滤器,或者也许{% htmltidy %},以便我可以在开发时查看干净的HTML?
我想知道在文件中添加包含或宏时是否有任何方法可以使用jinja缩进缩进.我想使用jinja生成代码文件.一个例子是
文件:class.html
class MyClass:
def someOp():
pass
{% include "someOp.html" %}
Run Code Online (Sandbox Code Playgroud)
文件:someOp.html
def someOp2():
pass
Run Code Online (Sandbox Code Playgroud)
模板的结果应该是:
class MyClass:
def someOp():
pass
def someOp2():
pass
Run Code Online (Sandbox Code Playgroud)
如果有任何方法让jinja在包含文件中每行的include标记之前添加缩进?或者有没有办法自定义jinja来做到这一点?
我有两个文件:
base.html文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{title}}</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
register.html
{% extends "base.html" %}
{% block content %}
<h1>Register</h1>
<form action="" method="post" name="register">
{{ form.hidden_tag() }}
{{ form.login.label }} {{ form.login(size=20) }}
{{ form.password.label }} {{ form.password(size=20) }}
<input type="submit" value="Register">
</form>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
它像这样呈现:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Register</title>
</head>
<body>
<h1>Register</h1>
<form action="" method="post" name="register">
<div style="display:none;"><input id="csrf_token" name="csrf_token" type="hidden" value="1393257771.168161##ce877b3519f192c05d3b409f3b7b07bb147dead7"></div>
<label for="login">login</label> <input …Run Code Online (Sandbox Code Playgroud) 使用Jinja2为Saltstack编写模板文件时,我经常在文件的开头定义一些变量.例如:
{% set ip = grains['ip4_interfaces']['eth1'][0] %}
{% set domain = pillar['company_domain'] %}
{% set version = pillar['site_version'] %}
{% set site_url = 'www.' + domain %}
[...]
Run Code Online (Sandbox Code Playgroud)
一切正常,但是当打开生成的文件时,我得到一个空行的块,其中包含jinja代码.
难道我做错了什么 ?如果没有,在使用模板时有没有办法摆脱那些空行?
我有非常简单的联系表格,我想以某种方式隐藏标签,以便它不显示Csrf Token.我正在使用Flask和Flask-WTForms,我正在渲染这样的表单:
{% for field in form %}
{{ field.label }}
{{ field }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
所以基本上这显示我的输入正确,并且隐藏了csrf,但标签没有被隐藏?我应该克服它并隐含地说,form.field_name而不是循环通过表单或有办法处理这个"角落案例".
我正在考虑在for循环声明或标签声明中进行逻辑检查,但到目前为止,我还没有找到有效的文档中的任何内容.
谢谢
编辑:我已经通过这样做"修复"了这个问题,但感觉有点肮脏和黑客,我不喜欢我仍然愿意接受更好的解决方案:
{% if not loop.first %}
{{ field.label }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)