@view_config(route_name='home_page', renderer='templates/edit.pt')
def home_page(request):
if 'form.submitted' in request.params:
name= request.params['name']
body = request.params['body']
renderer_dict = dict(name=name,body=body)
new_comment = render('new_page.pt', renderer_dict, request=request)
with open('tutorial:templates/{name}.html','w') as file:
file.write(new_comment)
return HTTPFound(location=request.static_url('tutorial:pages/{pagename}.html',pagename=name))
return {}
现在这是一个可调用的视图我在我的金字塔应用程序中,这是我的应用程序主页。我担心创建文件的行(打开...)。我希望文件的名称与上面代码中的request.params定义的名称相同,但我不确定如何传递变量(我怀疑括号是正确的解决方案)。然后,我希望将.html添加到该名称,使其成为完整的文件名。我不确定使用什么语法来执行此操作
编辑:我也想了解如何在返回HTTPFound行上正确执行此操作。我希望它重定向到该新文件。现在我有{pagename} .html但怀疑这已经足够了。我觉得这个问题的解决方案与开放式线路的解决方案相同,但如果我错了,请纠正我。
答案 0 :(得分:1)
首先,我认为你可能不应该做任何你想做的事情。
第二,打开文件......
name = request.params['name']
app_dir = SEE_BELOW
filename = "%(app_dir)s/templates/%(name)s" % { 'app_dir':app_dir , 'name':name }
filename = "%s/templates/%s" % ( app_dir , name )
with open(filename,'w') as file:
file.write(new_comment)
我要注意一些事情:
env.ini templates_writable_dir =%(此处)s / app / templates / writable /
然后我可以通过以下方式访问它: request.registry.settings [ 'templates_writable_dir']
请注意,我制作了一个特定的可写子文件夹。我不希望主要的东西可写。我将chmod / grp写入可写文件夹,以便用户金字塔可以运行。我不会允许该用户写任何其他内容。
"tutorial:templates/{name}.html"
使用模板化语法,该语法仅适用于模板。您的一个金字塔插件会将renderer_dict
注入模板并为您呈现。你需要使用普通的python字符串格式,正如我上面使用两个选项所示。更重要的是......
根据你的问题,你不仅是金字塔的新手,也是python的新手。我建议在进入金字塔之前做一些快速的python教程 - 或任何其他框架。
答案 1 :(得分:0)
我不认为标准的开放理解教程:模板甚至是{name}
在使用open
之前使用request.static_path