我有一个列表,其中包含作为元组列表的帖子信息(列表由元组组成),但我面临着如何将其传递给瓶子中的模板的问题,我已经尝试了很多,并检查了 stackoverflow 中的大多数问题,我找不到一个好的且明确的问题。
这是我尝试过的:
@route('/v/:name')
def page_viwer(name):
id=db.searchU('user', name)
result=db.searchU_forG(id[0][0])
if len(result)>0:#if we got posts
return template('v',post=result)
Run Code Online (Sandbox Code Playgroud)
这是v.tpl
<html>
%for post in res:
%for id, title, dec, pic,not_needed in post:
<h3>{{id}}</h3>
<h3>{{title}}</h3>
<h3>{{dec}}</h3>
<h3>{{pic}}</h3>
<br/>
%end
</html>
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,我收到错误 500 ...当我检查日志时,原因是:
%for id, title, dec, pic in post:
TypeError: 'int' object is not iterable
在现有的应用程序中,我们使用 Mako 模板(不幸的是..)。这对于 HTML 输出来说没问题,因为换行符并不重要。
但是,我们现在需要使用模板生成文本/纯电子邮件 - 因此控制语句引入的任何换行符都是不可接受的。
Mako 是否提供任何选项来使语句行(即以 开头的语句%
行)不会导致输出中出现换行符?我检查了文档,但到目前为止找不到任何东西......
是否可以将 mako 脚本的 for 循环仅填充到一行?到目前为止,我看到的所有示例都创建了多行,并且在一行中编写 mako for 循环会导致 mako 错误。
填充 mako 模板的示例代码:
data = ['foo', 'bar', 'baz']
template = Template(filename='test.mak')
template.render(data=data)
Run Code Online (Sandbox Code Playgroud)
模板文件 test.mak (创建多行,这不是我想要的):
items=
% for d in data:
${d}${'' if loop.last else ','}
% endfor
Run Code Online (Sandbox Code Playgroud)
预期的扩展 mako 脚本输出应该是items=foo,bar,baz
.
我当前的解决方法是items=${','.join(data)}
使用 mako 脚本,但我想知道这是否也可以通过内置的 mako 指令实现。
我想用JSP
or之类的标签设计自己的 HTML 模板Jade
,然后将数据从 python 传递给它并让它生成完整的 html 页面。
我不想像DOM
. 只有数据进入页面,页面模板决定数据如何布局。
我不想使用 HTTP 提供结果页面,只想生成 HTML 文件。
是否可以?
更新
我找到了 Jinja2,但我有奇怪的样板要求。例如,他们希望我创造环境
env = Environment(
loader=PackageLoader('yourapplication', 'templates'),
autoescape=select_autoescape(['html', 'xml'])
)
Run Code Online (Sandbox Code Playgroud)
同时说yourapplication
找不到包。如果我删除loader
参数,它会在线抱怨
template = env.get_template('mytemplate.html')
Run Code Online (Sandbox Code Playgroud)
说
no loader for this environment specified
Run Code Online (Sandbox Code Playgroud)
我可以只从磁盘读取模板并用变量填充它,而不需要额外的东西吗?
因为我一直很晚才回答标记php的问题,我实际上知道答案,我想我会尝试自己提问.
我已经在php中对自定义模板引擎进行了如此多的完整重写,这么长时间以来,我以为我会征求意见.
简而言之,这是我迄今为止实施的最重要的部分:
IView
兼容的类实例(IView
定义Render()
方法)
sprintf('//%s:*[@runat="server"]', $namespaceprefix )
$tag.localName
并实例化一个并将其附加到原始模板.main()
处理程序,处理程序将呈现它.我的模板基于xml.一个简单的模板目前看起来像:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:red="http://www.theredhead.nl/serverside">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Title will be filed by the View depending on the Controller</title>
<link rel="stylesheet" type="text/css" href="/Stylesheet/Get/Main/" />
</head>
<body>
<!-- the entire body may be reset by the view using it, using XPath and DOM functions -->
<!-- Usually the PageHeader and PageFooter would be …
Run Code Online (Sandbox Code Playgroud) 我知道有些帖子已经涉及同一主题.
以下是链接:
我正在尝试将php爆炸功能合并到一个javascript模板中.该插件是我从GitHub下载的blueimp @ https://github.com/blueimp/jQuery-File-Upload/downloads的 jQuery-File-Upload .
以下是我的代码的一部分,我正在尝试执行并使其工作.
<!-- The template to display files available for download -->
<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr>
<td>
<?php echo "{%=file.name%}"; ?> //{%file.name%} contains a string seperated by underscores
<?php $file_name_long = '{%=file.name%}'; ?>
<?php $file_name = explode ('_' , $file_name_long); ?>
<?php print_r($file_name); ?>
</td>
</tr>
...
...
Run Code Online (Sandbox Code Playgroud)
我能够将$ file_name打印为数组,但是我无法通过file.name中的下划线将其分开.打印的数组按照file.name包含整个字符串.
我不确定这是否可行.我一整天都在努力.如果这不可行或逻辑上不正确,请告诉我,以便我可以停止尝试使这项工作.谢谢和赞赏.
我很熟悉Play 1.x
.但我不得不使用cassandra
DB.这就是我必须使用的原因Play 2.x
然而Scala真的混合了一切.模板是非常不同的Play 2.x
.例如,在Play 1.x
我简直发送任何参数为String
,int
,object
例如,arraylist
等等.
在渲染到视图模板时,可以在模板中轻松使用这些参数.我不知道如何成功,Play 2.x
只有一个渲染,它只是让我渲染一个String
.
我在Play 2.x
文档中读到了一些相关内容.你能告诉我一些例子或者给我一些关于这方面的教程吗?
我希望在树枝中扩展样式表列表.我尽可能地删除了代码,以说明我想要实现的目标.
base.html.twig
<!DOCTYPE html>
<html>
<head>
<title>Some title</title>
{% block stylesheets %}
<link href="css/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="css/bootstrap-responsive.min.css" rel="stylesheet" media="screen">
<link href="css/custom-theme/jquery-ui-1.10.0.custom.css" rel="stylesheet" media="screen">
{% endblock %}
</head>
<body>
{% block content %}
.. content for body goes here etc
{% endblock content %}
</body>
<!-- rest of template --!>
Run Code Online (Sandbox Code Playgroud)
然后,我重用基本模板,但我不想重新放置所有样式表,我只想在列表的末尾添加一个?
使用base的模板
{% extends 'sjQueryBundle::base.html.twig' %}
{% block stylesheets %}
<link href="css/sales-journal.css" rel="stylesheet" media="screen">
{% endblock %}
{% block content %}
some template stuff here
{% endblock content %}
Run Code Online (Sandbox Code Playgroud)
上面的问题是它完全取代了样式表块我只是想将sales-journal.css添加到最后?
我正在寻找一个简单的模板引擎,它将YAML剪切为上下文,并且非常适合阅读Markdown以及一些标记来生成Markdown.我尝试过Jekyll的液体,它起作用,除了在Markdown中非常重要的空白.
例如,使用此输入...
---
samples:
- name: one
samplecode: |
function sample() {
return 1;
}
- name: two
samplecode: |
function sample() {
return 2;
}
---
{% for s in page.samples %}
- {{s.name}}
{{s.samplecode}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
输出是:
- one
function sample() {
return 1;
}
- two
function sample() {
return 2;
}
Run Code Online (Sandbox Code Playgroud)
而不是以下实际上与Pandoc一起使用的:
- one
function sample() {
return 1;
}
- two
function sample() {
return 2;
}
Run Code Online (Sandbox Code Playgroud)
这实际上已经为Jekyll讨论过.
所以我的问题是:有没有适合我需求的简单模板引擎?
我有一个对象数组,$arr
一个对象有一个名为的属性,jsonData
其中包含一个字符串中的json数据,如何将该字符串解析为实际的JSON对象,并检索让我们说键的值name
?我试过这个:
#foreach ($obj in $arr)
#set ($jsonData = "#evaluate(${obj.jsonData})")
$jsonData.get("name") ## <-- not working
#end
Run Code Online (Sandbox Code Playgroud)