簡體   English   中英

金字塔:如何對某個絕對路徑進行靜態查看,然后讓用戶將文件上傳至該路徑?

[英]Pyramid: How can I making a static view to some absolute path, and then let users upload files to that path?

在我可調用的視圖中,我希望用戶能夠創建一個名為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

編輯:如果有人對為什么這個問題沒有得到足夠的重視有一個想法,我很想聽聽。

雖然我覺得您可能對如何提供用戶生成的內容有誤解,但我將向您展示一種解決您所要求的方法的方法。 通常,用戶生成的內容不會上傳到您的源中,您將在外部提供一些可配置的位置來放置它,如下所示。

通過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可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM