0
@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 但怀疑这是否足够。我觉得解决方案与 with open 行相同,但如果我错了,请纠正我。

4

2 回答 2

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)

我要注意几点:

  1. app_dir - 我忘记了如何获取实际的金字塔应用程序目录。我通常会被这些东西吓到,所以只使用特定的子目录,比如:

env.ini templates_writable_dir = %(这里)s/app/templates/writable/

然后我可以通过以下方式访问它:request.registry.settings['templates_writable_dir']

请注意,我创建了一个特定的可写子文件夹。我不希望主要内容可写。我将 chmod/grp 那个可写文件夹,以便用户金字塔可以编辑它运行。我不会允许该用户写入任何其他内容。

  1. "tutorial:templates/{name}.html"那是使用模板化的语法,它只适用于模板。您的一个金字塔插件将其renderer_dict注入模板并为您呈现。您需要使用普通的 python 字符串格式,如我上面使用两个选项所示。

更重要的是...

根据您的问题,您不仅是金字塔新手,也是 python 新手。我建议在进入 Pyramid 或任何其他框架之前先做一些快速的 Python 教程。

于 2013-02-07T20:25:22.570 回答
0

我不认为标准开放理解教程:模板甚至 {name}

在使用 open 之前使用 request.static_path

于 2013-02-07T20:44:17.643 回答