标签: jinja2

在Jinja2中投入到str

我想转换一个通过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)

python jinja2

29
推荐指数
2
解决办法
2万
查看次数

Google App Engine:UnicodeDecodeError:'ascii'编解码器无法解码位置48中的字节0xe2:序号不在范围内(128)

我正在使用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)

python unicode google-app-engine jinja2 python-unicode

29
推荐指数
1
解决办法
5万
查看次数

在jinja2模板上使用css样式表

我正在使用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

html css python jinja2 flask

29
推荐指数
2
解决办法
3万
查看次数

在Google App Engine中调试Jinja2

当我在Google App Engine中运行Jinja2时,我得到了无用的调试信息.我收集这是因为FAQ中的这个项目:

我的追溯看起来很奇怪.发生了什么?

如果未编译speedups模块并且您使用的是没有ctypes的Python安装(没有ctypes的Python 2.4,Jython或Google的AppEngine),Jinja2无法提供正确的调试信息,并且回溯可能不完整.目前没有针对Jython或AppEngine的良好解决方法,因为ctypes在那里不可用,并且不可能使用speedups扩展.

虽然目前没有"良好"的解决方法,是否有任何解决方法,以便在出现异常时打印的信息可以更有帮助?

谢谢你的阅读.

布赖恩

python debugging google-app-engine jinja2

28
推荐指数
1
解决办法
3356
查看次数

避免来自Jinja2的含糊不清的胡须,包括jQuery模板

我正在尝试将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的变量开始和结束分隔符是不切实际的.此外,它令人困惑,降低了互操作性,并需要额外的培训.最好避免使用此选项.

所以我想到的两个替代方案就是:

  1. Jinja2逃避每个'{{'和'}}',我不太确定如何做得最好("{{"{{"}}`,也许,但这很冗长);

  2. 更实际 - 也许是理想的 - 会告诉Jinja2 不要解析代码块,也许是通过jQuery扩展.

我很感激你的想法和反馈.谢谢你的阅读.

jquery jinja2 jquery-templates

28
推荐指数
1
解决办法
7228
查看次数

Jinja模板的{%spaceless%}标签?

Django有一个有用的{% spaceless %}标记,可以从HTML中删除额外的空格.

我的模板产生了很多空白,添加{%-和处理-%}空白控制的地方太麻烦了.有没有人看过类似于{% spaceless %}Jinja 的过滤器,或者也许{% htmltidy %},以便我可以在开发时查看干净的HTML?

jinja2

28
推荐指数
3
解决办法
2万
查看次数

Jinja保留包含或宏的缩进

我想知道在文件中添加包含或宏时是否有任何方法可以使用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来做到这一点?

templates jinja2

28
推荐指数
2
解决办法
1万
查看次数

Jinja2正确缩进包含块

我有两个文件:

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 flask

28
推荐指数
2
解决办法
2万
查看次数

删除Jinja2变量定义留下的空行

使用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代码.

难道我做错了什么 ?如果没有,在使用模板时有没有办法摆脱那些空行?

jinja2 salt-stack

28
推荐指数
1
解决办法
2万
查看次数

有没有办法在使用Flask和Flask-WTForms循环表单时隐藏csrf标签?

我有非常简单的联系表格,我想以某种方式隐藏标签,以便它不显示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)

python jinja2 flask

27
推荐指数
3
解决办法
5652
查看次数