2

私のビュー callable では、ユーザーが 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'(1 つは name 変数です) 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

編集:この質問があまり注目されていない理由について誰かが考えを持っているなら、ぜひ聞いてみたい.

4

1 に答える 1

4

ユーザーが作成したコンテンツを提供する方法について、おそらく誤解していると思いますが、あなたが求めていることを実行する方法を紹介します。一般に、ユーザーが生成したコンテンツはソースにアップロードされません。以下に示すように、それを配置するための構成可能な場所を外部に提供します。

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

于 2013-02-13T05:11:22.090 に答える