3

我们可以用 python 语言编写(或者可能存在这样的 web 框架),我们可以像 PHP 语言一样编写 Python 和 html 标签。

我们能不能有这样的python文件结构:

some_python_file.py:

<html>
<head>
     <title>Lol</title>
<head>
<body>
    My PyWeb Slang
</body>
</html>

<!-- this part should be python -->
<?py
    from Eternity import Kiss

    love = Kiss.Forever()
    print "%s" % love
?>

对不起,我用大写字母写:消歧:

您可以看到,该模板在每一行中使用 {% goodies %} 或 <%= goodies %>

{% extends "layout.html" %}
{% block body %}
  <ul>
  {% for user in users %}
    <li><a href="{{ user.url }}">{{ user.username }}</a></li>
  {% endfor %}
  </ul>
{% endblock %}

但在 PHP 中:

<div>Good Morning, Sun!</div>
<?php

     echo "Happy!";
     echo "Hi, WaterLand!";

?>

如果 Python 可以这样做,它应该是这样的:

<div>Good Morning, Sun!</div>

<?py

     print "%s" % "Happy!"
     print "%s" % "Hi, WaterLand!";

?>

有想法,还是我需要更明确?

谢谢你。:)

嗯,如果是这样:

我们可以用 mod_python 编写类似的东西(从下面扩展[morphyn]示例):

<html>
<%
    greet = 'Hello Wee!'
    answer = 'Hello Bee!'
%>
<h1><%= greet %></h1>
<h2><%= answer %></h2>
</html>

在那里你可以看到超过 2'u 行进入 <% ... %> 我们可以吗?

4

3 回答 3

5

这并不完全是您所要求的,但正确的方法是使用模板引擎。看看Jinja2Django还提供了自己的模板引擎。

更新:

默认情况下,Python 不能嵌入到 HTML 页面中。然而,至少有一种方法可以做到这一点。mod_python,Apache2 的一个模块,提供了您想要的PSP(Python 服务器页面)功能。

<html>
<%
    greet = 'Hello'
%>
<h1><%= greet %></h1>
</html>

请记住,混合逻辑和表示通常不是一个好主意。正如我原来的答案所述,正确的方法仍然是使用模板引擎。你可能有很好的理由去做你想做的事,但很可能没有。

于 2013-02-05T14:06:56.767 回答
1

web.py的工作方式与您想要的方式相似,但有点倒退。您使用 URL 来调用类,并且类可以呈现可以传递参数的模板,以便在模板呈现到 html 页面时填充内容。我认为它比Django更易于使用,但如果你有很多内容一直在变化,它可能是要走的路。以下是来自 web.py 网站的代码示例,它显示了它是多么简单。

import web

urls = (
    '/(.*)', 'hello'
)
app = web.application(urls, globals())

class hello:        
    def GET(self, name):
        if not name: 
            name = 'World'
        return 'Hello, ' + name + '!'

if __name__ == "__main__":
    app.run()
于 2013-02-05T15:18:47.473 回答
0

是的:我们可以使用PSP(Python 服务器页面)[用户:morphyn 答案]

Paul Osman:mod_python 简介

文章示例:

<%
    a = [1,2,3,4,5,6]
    for number in a:
%>
This is a number: <%=number %> <br />
<%
    # this terminates the iteration
%>
<h1>Hello</h1>
于 2013-02-05T18:20:34.123 回答