-1

我正在使用 Klein 开发 REST 端点。(类似于 Python Flask)我对如何将参数传递给我想要服务的 HTML 文件感兴趣,如果这可能的话。

from twisted.web.static import File
from klein import Klein
app = Klein()

@app.route('/', branch=True)
def pg_index(request):
    return File('./')

app.run("localhost", 8080)
4

2 回答 2

1

使用模板语言,例如JinjaChameleon。您可以返回字典并与模板上的字典进行交互。

Klein 的文档描述了如何使用 Twisted 模板。

模板

您还可以通过返回实现 twisted.web.template.IRenderable 的任何内容来轻松使用 twisted.web.templates,例如 twisted.web.template.Element 在这种情况下,模板将被渲染,结果将作为响应发送身体。

from twisted.web.template import Element, XMLString, renderer
from klein import run, route

class HelloElement(Element):
    loader = XMLString((
        '<h1 '
        'xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1"'
        '>Hello, <span t:render="name"></span>!</h1>'))

    def __init__(self, name):
        self._name = name

    @renderer
    def name(self, request, tag):
        return self._name

@route('/hello/<string:name>')
def home(request, name='world'):
    return HelloElement(name)

run("localhost", 8080)

this,它准确地向您展示了您的要求。引用前几段:

HTML 模板是将模板文档(描述样式和结构,但本身不包含任何内容)转换为包含应用程序中对象信息的一些 HTML 输出的过程。在 Python 中有很多很多的库可以做到这一点:仅举几例,jinja2、django templates 和 clearsilver。您可以轻松地在您的 Twisted Web 应用程序中使用这些库中的任何一个,或者将它们作为 WSGI 应用程序运行,或者通过调用您首选的模板系统的 API 以将它们的输出生成为字符串,然后将这些字符串写入 Request.write 。

在我们开始解释如何使用它之前,我想强调一下,如果您喜欢其他方式来生成 HTML,则不需要使用 Twisted 的模板系统。如果它适合您的个人风格或应用程序,请使用它,但请随意使用其他东西。Twisted 包含自己使用的模板,因为 twisted.web 服务器需要在不同的地方生成 HTML,我们不想为此添加另一个大的依赖项。Twisted 与其他系统没有任何不兼容,因此这与我们使用自己的系统无关。

于 2018-05-24T13:16:42.803 回答
0

请参阅此示例以将 Jinja2 模板与 Klein 一起使用。

于 2019-04-11T11:33:34.823 回答