如何在金字塔中创建具有变量名称的文件?

时间:2013-02-07 19:15:21

标签: python pyramid

@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但怀疑这已经足够了。我觉得这个问题的解决方案与开放式线路的解决方案相同,但如果我错了,请纠正我。

2 个答案:

答案 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)

我要注意一些事情:

  1. app_dir - 我忘了如何获得实际的金字塔应用程序目录。我通常会被这些东西吓到,所以只能使用像这样的特定子目录:
  2. 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字符串格式,正如我上面使用两个选项所示。
    2. 更重要的是......

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

答案 1 :(得分:0)

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

在使用open

之前使用request.static_path