0

ファイルアップロードフィールドのあるフォームがあり、このフィールドがテンプレートに表示されます

フォームを送信した後、エラーが見つかってページに戻ると、アップロードファイルが表示されなくなります。エラーが見つかった後、フォームページにアップロードファイルを表示する方法について教えてください。

フォームは次のとおりです。

class Project_f(forms.Form):
    info=forms.CharField(required=True)
    file=forms.FileField(required=False)

およびテンプレート:

<form action="" method="post" id="form1" enctype="multipart/form-data" ....>
{% csrf_token %}

            <td ><label for="id_info">product info:</label></td>
            <td colspan=3 >{{form.info}}</td>   
            <td >&nbsp;</td>
        </tr>
        <tr class="tr_blank"></tr>
        <tr>
            <td >&nbsp;</td>
            <td><label for="id_attachement_id">add attachment:</label></td>
            {% if attachments %}
                {% for attachment in attachments %}
                <td colspan="2">
                current attachment:&lt;div class='attachmentdd'id={{attachment.id}}><a href={{attachment.file}}>{{attachment.file}}</a>
                <br>modify:&lt;input id="txt" class="input_text" type="file" name="attachement_id" style="width:100%;height:23px;">
                </div>
                {% endfor %}
            {% else %}
            <td >{{form.attachement_id}}</td>   
            {% endif %}
            <td >&nbsp;</td>
        </tr></form>

以下はviews.pyです

Pr_form=Project_f(request.POST,request.FILES)
if Pr_form.is_valid():
      ......
else:
       c={'form': Pr_form,'user':login_name,'ourteam':ourteam}
       c.update(csrf(request))
       return  render_to_response('project_form.html',c,context_instance=RequestContext(request))

フォームを送信した後、サーバーでエラーが見つかった場合、エラーメッセージを表示したときにアップロードファイルのパスは表示されません

4

1 に答える 1

0

ビューのrequest.FILESディクショナリを介してファイルにアクセスし、それらの変数をテンプレートに渡すことで、アップロードされたファイルから情報を取得できます。

[アップデート]

さて、ビューから更新されたコードに基づいて、request.FILESコレクションから情報を取得する方法とコードを少しクリーンアップする方法の例を次に示します。

#views.py
from django.shortcuts import render #assumes Django 1.3+

from your_app.forms import Project_f


def my_view(request):
    #always lower-case variable names, as classes are always capitalized
    pr_form = Project_f(request.POST or None, request.FILES or None)

    if request.method == 'POST':
        if pr_form.is_valid():
           my_file = request.FILES.get('my_file')
           file_name = my_file.name
           # do something with file_name, etc.

           pr_form.save()
    return render(request, 'project_form.html', {'form' : pr_form,
        'user' : login_name, 'ourteam' : ourteam})
于 2012-04-23T13:09:59.277 に答える