【问题标题】:Pyramid: How can I making a static view to some absolute path, and then let users upload files to that path?Pyramid:如何对某个绝对路径进行静态视图,然后让用户将文件上传到该路径?
【发布时间】:2013-02-21 10:46:39
【问题描述】:

在我看来可调用,我希望用户能够创建一个名为 filename 的新文件,如下所示:

@view_config(route_name='home_page', renderer='templates/edit.pt')
def home_page(request):
    if 'form.submitted' in request.params:
        name= request.params['name']

        input_file=request.POST['stl'].filename
        vertices, normals = [],[]
        for line in input_file:
            parts = line.split()
            if parts[0] == 'vertex':
                vertices.append(map(float, parts[1:4]))
            elif parts[0] == 'facet':
                normals.append(map(float, parts[2:5]))

        ordering=[]
        N=len(normals)

        ...parsing data...

        data=[vertices,ordering]
        jsdata=json.dumps(data)
        renderer_dict = dict(name=name,data=jsdata)
        app_dir = request.registry.settings['upload_dir']
        filename =  "%s/%s" % ( app_dir , name )
        html_string = render('tutorial:templates/view.pt', renderer_dict, request=request)
        with open(filename,'w') as file:
                file.write(new_comment)
        return HTTPFound(location=request.static_url('tutorial:pages/%(pagename)s.html' % {'pagename': name}))

    return {}   

现在,当我尝试上传文件时,我收到以下错误消息:IOError: [Errno 2] No such file or directory: u'/path/pages/one'(一个是名称变量)我相信这是因为我错误地定义了 app_dir 变量。我希望 filename 是使用上面定义的 name 变量创建的新文件的 url(以便可以在 www.domain.com/pages/name 访问它)。这是我的应用程序的文件结构:

 env
    tutorial
        tutorial
            templates
                home.pt
            static
                pages
                    (name1)
                    (name2)
                    (name3)
                     ....
            views.py
            __init__.py

在我的 init.py 我有:

config.add_static_view(name='path/pages/', path=config.registry.settings['upload_dir'])

在我的 development.ini 文件中有

[app:main]
use = egg:tutorial

upload_dir = /path/pages

编辑:如果有人知道为什么这个问题没有引起太多关注,我很想听听。

【问题讨论】:

    标签: python pyramid


    【解决方案1】:

    虽然我觉得您可能对如何提供用户生成的内容存在误解,但我将向您展示一种方法来满足您的要求。通常用户生成的内容不会上传到您的源中,您将在外部提供一些可配置的位置来放置它,如下所示。

    通过您的 INI 文件使路径可配置:

    [app:main]
    use = egg:tutorial
    
    upload_dir = /path/to/writable/upload/directory
    

    添加一个静态视图,可以提供该目录下的文件。

    config.add_static_view(name='/url/to/user_uploads', path=config.registry.settings['upload_dir'])
    

    在您的上传视图中,您可以通过以下方式获取您的app_dir

    app_dir = request.registry.settings['upload_dir']
    

    将数据复制到那里,然后在/url/to/user_uploads/filename 上提供。

    【讨论】:

    • 所以在这种情况下,页面目录不是“可配置的位置来放置它”吗?如果我使那个可写而不是 path/to/writeable/upload/directory 那会起作用吗?我已经更新了显示我添加静态视图的位置的问题。
    • 你能解释一下你在哪里找到了 [app:main] 和 use = egg:tutorial 的用法吗?我无法弄清楚它们的含义,也无法在 docs.pylonsproject.org/en/latest/docs/pyramid.html 中找到任何相关信息
    • 当然可以,但是在您的情况下,您将上传文件放在源代码树中,这确实令人不悦。
    • [app:main] 只是您应用程序的 INI 文件部分。 docs.pylonsproject.org/projects/pyramid/en/1.4-branch/narr/…
    • 所以如果我将 config.add_static_view(name='/pages/',path=config.registry.settings['upload_dir']) 放在 ini 文件中,然后将 upload_dir=/pages / 这会使页面目录在源代码树的“外部”吗?如果不是,您能解释一下这与您所做的事情之间的区别吗?
    猜你喜欢
    • 1970-01-01
    • 2020-12-11
    • 2021-10-18
    • 2012-09-16
    • 2016-12-11
    • 2014-03-16
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    相关资源
    最近更新 更多