2

右、簡単な画像アップロード フォームを使用して画像を MEDIA_ROOT にアップロードする方法を学習しています。フォームは正常にレンダリングされ、エラーは発生しませんが、ファイルが MEDIA_ROOT ディレクトリに表示されません。ドキュメントの例に従っても動作しない場合は、django ファイルのアップロード処理を正しく理解していないことが原因であることがわかっています。だからここに私のコードがあります:

フォーム.py

from django import forms

class UploadImageForm(forms.Form):
    image = forms.ImageField()

ビュー.py

def merchant_image_upload(request):
    if request.method == 'POST':
        form = UploadImageForm(request.POST, request.FILES)
        if form.is_valid():
            FileUploadHandler(request.FILES['image'])
            return HttpResponseRedirect('/dashboard/gallery')
    else:
        form = UploadImageForm()
    return render_to_response('gallery.html', RequestContext(request, {'form': form}))

テンプレートファイル

{% extends 'base.html' %}
{% block main %}
    <form action="{% url scvd.views.merchant_image_upload %}" method="post">{% csrf_token %}
        {{ form.image }}
        <input type="submit" value="Upload" />
    </form>
{% endblock %}

うまくいけば、それが助けを得るのに十分な情報です。他に提供できるものを教えてください。ありがとう、助けてくれて本当にありがとう。

4

3 に答える 3

18

Matt S が述べているように、モデルに添付する必要はありません。フォームが正しく設定されていれば、request.FILES には画像のすべてのデータがあります。

enctype="multipart/form-data"ドキュメントがここに記載されているように、要素で必ず使用する必要があります: https://docs.djangoproject.com/en/dev/ref/forms/api/#binding-uploaded-files-to-a-form

それとは別に、ファイルのアップロードに関するドキュメントを読んでください: https://docs.djangoproject.com/en/dev/topics/http/file-uploads/

必要なものはすべてそこに文書化されています。お役に立てれば!

編集OPは、ファイルのアップロードに関する詳細情報を要求しました

ドキュメントから:

ほとんどの場合、アップロードされたファイルをフォームにバインドするで説明されているように、リクエストからフォームにファイル データを渡すだけです。これは次のようになります。

from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response

# Imaginary function to handle an uploaded file.
from somewhere import handle_uploaded_file

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['file'])
            return HttpResponseRedirect('/success/url/')
    else:
        form = UploadFileForm()
    return render_to_response('upload.html', {'form': form})

そして、彼らはあなたが関数を書く方法の例を持っていhandle_uploaded_fileます:

def handle_uploaded_file(f):
    destination = open('some/file/name.txt', 'wb+')
    for chunk in f.chunks():
        destination.write(chunk)
    destination.close()
于 2011-09-05T01:52:10.033 に答える
1

ファイルをアップロードして request.FILES に表示するには、以下に示すように、フォームに enctype="multipart/form-data" を含める必要があります。

<form action="{% url scvd.views.merchant_image_upload %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.image }}
    <input type="submit" value="Upload" />
</form>
于 2016-04-07T04:41:08.020 に答える
0

現在どこにも保存されていないため、モデルに( ImageFieldとして)アタッチする必要があります。今のところ問題なく処理できますが、ビューが戻った後に破棄されます。

気にしないでください、モデルが不要であることに気づきませんでした。

于 2011-09-05T01:39:48.680 に答える