在Jinja2中,我希望通过运行以下内容来实现它的运行:
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('.'))
template = env.get_template('x.html')
print template.render()
Run Code Online (Sandbox Code Playgroud)
本质上,目标是<head>
通过使用{% call js() %} /* some js */ {% endcall %}
宏来将所有javascript合并到标签中.
<html>
<head>
<script type="text/javascript>
{% block head_js %}{% endblock %}
</script>
</head>
<body>
{% include "y.html" %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
{% macro js() -%}
// extend head_js
{%- block head_js -%}
{{ super() }}
try { {{ caller() }} } catch (e) {
my.log.error(e.name + ": " + e.message);
} …
Run Code Online (Sandbox Code Playgroud) 让我从这开始不重复
为什么__init__如果没有args调用__new__就不会被调用.我试图精心构建了一些示例代码__new__
和__init__
有没有解释,我可以找到.
基本参数:
__init__
方法,反过来调用一个_parse
方法_parse
子类中的方法super
以避免Python日志记录中的问题
:为什么__init__被调用两次?无论如何,__init__
应该在之后调用__new__
以及为什么下面的一些样本不起作用的每个解释我似乎能够指出其他有用的情况并排除解释.
class NotMine(object):
def __init__(self, *args, **kwargs):
print "NotMine __init__"
self._parse()
def _parse(self):
print "NotMine _parse"
class ABC(NotMine):
def __new__(cls,name,*args, **kwargs):
print "-"*80
print "Entered through the front door ABC.__new__(%s,%s,*%s,**%s)"%(cls,name,args,kwargs)
if name == 'AA':
obj = super(NotMine,ABC).__new__(AA,*args,**kwargs)
print "Exiting door number 1 with an instance of: %s"%type(obj)
return obj
elif …
Run Code Online (Sandbox Code Playgroud) 我一直在考虑一个模板解决方案,虽然我的选择是在Mako和Genshi之间.我觉得Genshi的模板有点难看,所以我更倾向于Mako.
我已经开始怀疑:Mako允许嵌入式Python代码这一事实有什么好处?一般的乔怎么方便?
如果没有嵌入Python代码,那么模板化是否足够?
如何在Genshi模板语言中使用简单的if/else?
我找到了这张票,这似乎表明Genshi不支持if/else,但它并没有真正解释它支持的内容.
我基本上只想要这样的东西:
<py:if test="c.row.currency">
${c.row.currency.upper()}
<py:else>
${c.row.dataset_.currency.upper()}
</py:if>
Run Code Online (Sandbox Code Playgroud)
但我得到'坏指令:别的'.我应该使用py:选择吗?我无法真正理解如何将它用于if/else条件.
我试图弄清楚如何使用Pylons和Python检查模板上下文'tmpl_context'中是否存在变量.我想要做的是:
我有一个Pylons布局模板.当且仅当变量c.messages
存在于上下文中时,这应包含消息部分.消息部分如下所示:
<div py:if="len(c.messages) > 0">
<py:for each="msg in c.messages">
<strong>${msg}</strong>
</py:for>
</div>
Run Code Online (Sandbox Code Playgroud)
如果控制器未定义c.messages,则会产生错误.所以我只想在定义变量时才包含它.有这个问题的解决方案吗?
我最近发现了 genshi.builder 模块。它让我想起了 Divmod Nevow 的 Stan 模块。如何使用 genshi.builder.tag 构建具有特定文档类型的 HTML 文档?或者这甚至是一件好事?如果没有,正确的方法是什么?
我使用Genshi(简化)有以下Python代码:
with open(pathToHTMLFile, 'r') as f:
template = MarkupTemplate(f.read())
finalPage = template.generate().render('html', doctype = 'html')
Run Code Online (Sandbox Code Playgroud)
源HTML文件中包含的实体,如©
,™
和®
.Genshi用它们的UTF-8字符替换它们,这会导致查看器出现问题(输出用作独立文件,而不是对Web请求的响应),最终会看到生成的HTML.有没有办法阻止Genshi解析这些实体?比较常见的那些&
通过就好了.
我的genshi模板中有以下javascript,我不确定如何在没有错误的情况下解析它:
floor = (!floor && floor !== 0)? 20 : floor;
Run Code Online (Sandbox Code Playgroud)
我试过这个:
floor = (!floor && floor !== 0)? 20 : floor;
Run Code Online (Sandbox Code Playgroud)
但它总是会产生这个错误:
'genshi.template.base.TemplateSyntaxError'>格式不正确(无效令牌)
有什么想法吗?