example.ec
<%
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
%>
<html>
<body>
<p>Hello <%= "%s", argv[0] %>!</p>
<table>
<tbody>
<% for (i = 1; i < argc; i++) { %>
<tr bgcolor="<%= i % 2 == 0 ? "#FFCCCC" : "#CCCCFF" %>">
<td><%= "%d", i %></td>
<td><%= "%s", argv[i] %></td>
</tr>
<% } %>
</tbody>
</table>
</body>
</html>
<%
return 0;
}
%>
compiled source code
$ erubis -l c example.ec
#line 1 "example.ec"
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
fputs("<html>\n"
" <body>\n"
" <p>Hello ", stdout); fprintf(stdout, "%s", argv[0]); fputs("!</p>\n"
" <table>\n"
" <tbody>\n", stdout);
for (i = 1; i < argc; i++) {
fputs(" <tr bgcolor=\"", stdout); fprintf(stdout, i % 2 == 0 ? "#FFCCCC" : "#CCCCFF"); fputs("\">\n"
" <td>", stdout); fprintf(stdout, "%d", i); fputs("</td>\n"
" <td>", stdout); fprintf(stdout, "%s", argv[i]); fputs("</td>\n"
" </tr>\n", stdout);
}
fputs(" </tbody>\n"
" </table>\n"
" </body>\n"
"</html>\n", stdout);
return 0;
}
这样可以兼顾 程序运行效率 和 代码可读性。
不好地方是: 页面表现和业务没有分离。
可以通过 ajax来更好分离,坚持html只表示结构也可以更好的分离。
stdout的问题,可以通过
<% int doc_gen(file * stdout) {
.....
这样 stdout就是参数了。