gpt4 book ai didi

python - python扭曲静态文件中的变量替换

转载 作者:太空宇宙 更新时间:2023-11-03 15:47:30 25 4
gpt4 key购买 nike

如何将扭曲的服务器变量替换为提供的文件资源。

例如,以下代码提供了一个网页,我可以在其中加载 ./templates/index.html :

if __name__ == '__main__':
var = 'my variable'
from twisted.web.static import File
webdir = File("{0}/templates/".format(os.path.dirname(os.path.realpath(__file__))))
web = Site(webdir)
reactor.listenTCP(int(os.environ.get('SR_LISTEN_PORT')), web)
reactor.run()

我希望在基本的 index.html 页面中用变量“var”替换 {{variable}}

因此页面将呈现“我的变量”而不是 hello world。

我怎样才能做到这一点?

最佳答案

看起来您需要一个模板引擎来提供文件,您可以使用 jinja2为了它。在您的情况下,应该使用 static.File 来渲染模板目录和 resource.Resource — 以提供通过 jinja2 渲染的文件:

import os

import jinja2

from twisted.internet import reactor
from twisted.web.resource import Resource
from twisted.web.static import File
from twisted.web.server import Site

template_dir = '{}/templates/'.format(os.path.dirname(os.path.realpath(__file__)))

def render(template_file, context):
env = jinja2.Environment(loader=jinja2.FileSystemLoader(template_dir))
return env.get_template(template_file).render(context).encode('utf-8')

class RDirectory(File):
def getChild(self, name, request):
if name == '':
return super(RDirectory, self).getChild(name, request)
return RFile()

class RFile(Resource):
isLeaf = True

def render_GET(self, request):
data = {'var': 'my variable'}
return render(request.uri, data)

if __name__ == '__main__':
web = Site(RDirectory(template_dir))
reactor.listenTCP(int(os.environ.get('SR_LISTEN_PORT')), web)
reactor.run()

文件可以是这样的:

<html>
<head><title>Test</title></head>
<body>{{ var }}</body>
</html>

请注意,jinja2 渲染是同步操作,它会阻塞twistedreactor。为了避免它,你可以 launch rendering in a thread或者尝试使用内置扭曲 templates但它们并没有提供很多可能性。

关于python - python扭曲静态文件中的变量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41622387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com