1

次のようなファイルフィールドを表示するDjangoテンプレートがあります。

  <div class="fieldWrapper">
      {{ auth_users_ext.user_pic.error }}
      Image Upload: {{ auth_users_ext.user_pic }}
  </div>

必要なenctype="multipart/form-data"を使用しました。このフィールドには、データベースから取得された値が正しく表示されるため、これまでのところ、想定どおりに機能していると想定しています。私が抱えている問題は、テンプレートファイル内のどこにフィールドを配置しても、その時点でrequest.POSTデータが切り捨てられることです。

したがって、フィールドをフォームの最後に配置すると、その上のすべてのフィールドが表示されます。フォームの一番上にフィールドを配置すると、何も表示されません。

ChromeでPOSTペイロードを読み取り、ビューに渡されるPOSTデータが完全であることを確認できます。

------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="csrfmiddlewaretoken"

********
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="csrfmiddlewaretoken"

********
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="staff_id"

98.0
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="auth_user_id"

1069
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="user_groups"

1
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="user_groups"

11
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="user_groups"

13
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="current_pic"

/media/no_pic.jpg
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="user_pic"; filename="Picture0029.jpg"
Content-Type: image/jpeg


------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="first_name"

Robert
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="last_name"

Vila
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="username"

bobvila
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="email"

BobVila@thisoldhouse.com
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="work_number"

1239111234
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="mobile_number"

1239111234
------WebKitFormBoundaryZTdhKmOKbDRAXLAm
Content-Disposition: form-data; name="mgr_id"

1
------WebKitFormBoundaryZTdhKmOKbDRAXLAm--

とにかく、ビューでrequest.FILES ['user_pic']を指定しても、何も表示されません。

更新しました

ビューからの関連コードは次のとおりです。

def STAFF(request, uid=None, template='auth_user.html'):
    [ ... ]
    user = request.user
    is_admin = user.groups.filter(name='*** ADMIN_GROUP_NAME ***')

    if uid == None:
        instance = AuthUser()
        ext_instance = AuthUserExt()
    else:
        instance = AuthUser.objects.get(auth_user_id=uid)
        ext_instance = AuthUserExt.objects.get(auth_user_id=uid)

    if request.method == 'POST':
        # get image request.FILE object
        if request.FILES:
            avatar = request.FILES['user_pic']
            # build destination path for os file handling
            dest_path = settings.MEDIA_ROOT + request.POST['username'] + '/avatar/'
            # create user/avatar dir if not exist
            if not os.path.exists(dest_path):
                os.makedirs(dest_path)
            # open file handle at the intended destination and write our request.FILE
            if os.path.isfile(dest_path + avatar.name):
                os.remove(dest_path + avatar.name)
            destination = open(dest_path + avatar.name, 'wb+')
            destination.write(avatar.read())
            destination.close()
            # build uri path for database insert
            uri_path = settings.MEDIA_URL + request.POST['username'] + '/avatar/' + avatar.name
        else:
            [ ... ] # lands here, because Django produces no request.FILES
4

1 に答える 1

2

この問題は、 GoogleChromeのある種の問題の結果として発生しました。そのファイルフィールドに問題があり、サーバーに返される実際のPOSTデータを切り捨てていたようですが、デバッグ情報を調べたときにすべてが順調であると思わせるのに十分な内部処理を行っていました。他のすべてのブラウザは問題なく動作しました。

于 2013-01-09T21:43:04.750 に答える