村岡です。

Djangoで作られてるサーバサイドで処理するなら、ポップアップは一筋縄ではいきませんが、request.FILESがおそらくそのエラーの対象のMultiValueDictなので、
request.FILES['csv']で取り出す処理の直前までに

if 'csv' in request.FILES:
    ファイルがなかった時のレスポンスを返す

こんな感じの処理を差し込めばよいかと。

2018年1月27日(土) 23:08 <sinfor...@gmail.com>:

> 初めての投稿になります。
>
> 当方、Django初心者のため基本的な質問でしたら申し訳ないのですが、以下のエラー処理をどのように実装したらよいか
> 調べてもいまいちうまく実現できないため、ご教授よろしくお願いいたします。
>
> 【実現したいこと】
> 以下の処理で、CSVファイルを指定してデータ登録する処理(①~③)は問題なく実装できました。
>
> ①HTMLページ上から「ファイルを選択」ボタンを押して、CSVファイル選択する
> ②「データ登録」ボタンを押す
> ③CSVのデータを取り込んでデータベースにデータを登録。
>
>
> ただし、①でファイルを選択しない状態で、②の「データ登録」ボタンを押すと、以下のようなエラーが
> 発生するため、ファイルを選択しない状態で「データ登録」ボタンを押した場合は、「ファイルを選択してください」
> といったエラーポップアップメッセージを表示したい。(難しいなら単純なエラー文字列を表示するだけでもいい)
>
>
> --------------------------------------------------------------------------------------------------------------
> Request Method: POST
> Request URL: http://127.0.0.1:8000/server/csv_import/
> Django Version: 2.0.1
> Exception Type: MultiValueDictKeyError
> Exception Value:
>
> 'csv'
>
>
> --------------------------------------------------------------------------------------------------------------
>
> 以下、①~③の処理に関するコードの概要です。
> =========================================
> HTMLのCVSファイル選択&データ登録のソース部分
> =========================================
> ※urlで指定している「csv import」はviews.py内で定義したCSVデータ登録用の関数名
>
> -----------------------------------------------------------------------------------------------------------------------------
> <form action='{% url "csv_import" %}' method='POST'
> enctype="multipart/form-data">
> </div>
>
> <div class="alert alert-info alert-dismissible">
>     <h3>一括データ登録</h3>
>   <div class="btn-group">
>     <input type='file' name='csv'>
>   </div>
>
>   <div class="btn-group">
>     <input type="submit" class="btn btn-danger" value="データ登録">
>   </div>
>     {% csrf_token %}
>   </form>
> </div>
>
> -----------------------------------------------------------------------------------------------------------------------------
>
> =========================================
> csv import関数のソース
>
> ServerInfoはモデル名です。(environment_id ,server_name,
>> os_version,cpu,memoryの4つの要素)
>
> =========================================
> def csv_import(request):
>
>     form_data = TextIOWrapper(
>        request.FILES['csv'].file, encoding='sjis')
>     if form_data:
>         csv_file = csv.reader(form_data)
>         for line in csv_file:
>              serverinfo, created = ServerInfo.objects.get_or_create(
>                  environment_id = line[0],
>                  server_name = line[1],
>                  os_version = line[2],
>                  cpu = line[3],
>                  memory = line[4],
>                  )
>              serverinfo.save()
>     return redirect('index')
>
>
> ------------------------------------------------------------------------------------
>
> おそらく、views.py内のcsv_import関数内でtry exceptでエラー処理をするかなにかをすればよいのかなというあたりは
> ついているのですが、いろいろやってもうまくいかず悩んでいる状況です。
>
> 以上、よろしくお願いいたします。
>
> --
> --
> ----------------- http://djangoproject.jp/ -----------------
> You received this message because you are subscribed to the Google Groups
> "django-ja" group.
> To post to this group, send email to django-ja@googlegroups.com
> To unsubscribe from this group, send email to
> django-ja-unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/django-ja
> ---
> このメールは Google グループのグループ「django-ja」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには django-ja+unsubscr...@googlegroups.com
> にメールを送信してください。
> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。
>

-- 
-- 
-----------------                       http://djangoproject.jp/                
         -----------------
You received this message because you are subscribed to the Google Groups 
"django-ja" group.
To post to this group, send email to django-ja@googlegroups.com
To unsubscribe from this group, send email to 
django-ja-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/django-ja
--- 
このメールは Google グループのグループ「django-ja」の登録者に送られています。
このグループから退会し、グループからのメールの配信を停止するには django-ja+unsubscr...@googlegroups.com 
にメールを送信してください。
その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

メールによる返信