質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

877閲覧

DjangoでCSVファイルを読み込む

Ykkykk

総合スコア140

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/07/25 07:13

編集2018/07/25 07:22

前提・実現したいこと

DjangoでCSVのアップロードフォームを作成したいです。
DjangoでCSVファイルをアップロードし、データを操作するために、アップロードフォームを作りたいのですが、うまくいきません。
サイト(https://qiita.com/nnsnodnb/items/f7b1b0b7f2099e403947)を参考にしてみたのですが、ファイルをアップロードするとPage not found(404)が生じてしまっている状態です。
サイトのものとはDjangoのバージョンが異なるため、自分で書き換えた個所があり、それが影響しているのかとも思いますが、いかんせん初心者のためよくわからない状況です。

発生している問題・エラーメッセージ

Page not found (404)
Request Method: GET
Request URL: http://localhost:8000/complete/

Using the URLconf defined in file_uploader.urls, Django tried these URL patterns, in this order:

admin/ [name='form'] complete [name='complete']

The current path, complete/, didn't match any of these.

You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

該当のソースコード

Django

1#プロジェクト名:file_uoloader 2#アプリ名:upload_form 3 4# file_uploader/urls.py 5###コメント行は省略いたします### 6 7from django.contrib import admin 8from django.urls import path, include 9 10 11urlpatterns = [ 12 path('admin/', admin.site.urls), 13 path('', include('upload_form.urls')), 14]

Django

1 2# upload_form/urls.py 3 4from django.urls import path 5from . import views 6 7urlpatterns = [ 8 path('', views.form, name = 'form'), 9 path('complete', views.complete, name = 'complete'), 10]

Django

1# upload_form/views.py 2 3from django.shortcuts import render, redirect 4from django.template.context_processors import csrf 5from django.conf import settings 6from upload_form.models import FileNameModel 7import sys, os 8UPLOADE_DIR = os.path.dirname(os.path.abspath(__file__)) + '/static/files/' 9 10# Create your views here. 11 12def form(request): 13 if request.method != 'POST': 14 return render(request, 'upload_form/form.html') 15 16 file = request.FILES.get('file', False) 17 18 path = os.path.join(UPLOADE_DIR, file.name) 19 destination = open(path, 'wb') 20 21 for chunk in file.chunks(): 22 destination.write(chunk) 23 24 insert_data = FileNameModel(file_name = file.name) 25 insert_data.save() 26 27 return redirect(to='complete/') 28 29def complete(request): 30 return render(request, 'upload_form/complete.html') 31

Django

1# upload_form/templates/upload_form/base.html 2 3<!DOCTYPE html> 4<html lang="ja"> 5 <head> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <meta name="viewport" content="content"> 8 <title>ファイルアップローダ</title> 9 </head> 10 <body> 11 {% block content %} 12 {{ content }} 13 {% endblock %} 14 </body> 15</html>

Django

1 2# upload_form/templates/upload_form/complete.html 3 4{% extends "upload_form/base.html" %} 5 6{% block title %}アップロード完了{% endblock title %} 7{% block content %} 8 <div align="center"> 9 <h1 align="center">アップロード完了</h1> 10 <a href="{% url 'upload_form:form' %}"><button>戻る</button></a> 11 </div> 12{% endblock content %}

Django

1 2# upload_form/templates/upload_form/form.html 3 4{% extends "upload_form/base.html" %} 5 6{% block title %}アップローダサンプル{% endblock title %} 7{% block content %} 8 <form method="POST" enctype="multipart/form-data"> 9 {% csrf_token %} 10 <input type="file" name="file"> 11 <input type="submit" value="アップロード"> 12 </form> 13{% endblock content %}

試したこと

views.pyのredirectがおかしいのかとも思い、書き換えるなどしてみましたが同じように404エラーが出ました。

補足情報(FW/ツールのバージョンなど)

Python 3.6.5
Django 2.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

upload_form/urls.pyで、URLがcomplete/ではなくcompleteになっています。
ここを直してみてください。

投稿2018/07/25 08:20

Udomomo

総合スコア1524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ykkykk

2018/07/25 08:30

ご回答ありがとうございます。 ご指摘いただいた個所を修正いたしましたところ、 NoReverseMatch at /complete/ 'upload_form' is not a registered namespace とエラーが出てしまいました…。 エラーが起きている個所として、views.pyのcomplete関数内にある return render(request, 'upload_form/complete.html') が表示されております。 多重な質問になってしまい、申し訳ありませんがご教示いただけますと幸いです。
Udomomo

2018/07/25 09:07

`upload_form/urls.py`のurlpatternの上に、`app_name = 'upload_form'` を追加してみてください。
Ykkykk

2018/07/25 09:19

再度ご回答いただきありがとうございます。 登録完了画面に遷移することができました。 ですが、このコードはファイル名と登録日時を保存していくだけのものだったのですね…。ファイルの中身を読み込んで操作する、ということが行いたかったのですが、このコードではできなかったようです。 とにかく、本当に助かりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問