djangoでwebアプリを作っているのですが、ファイルのアップロードでつまずきました。
csvファイルを選択し、アップロードを押すと、アップロード先のurlが分かるように表示させたいのですが、
index.htmlの{% if upload_url %} が反応せず、元のindex.htmlが表示されます。
/media/にファイルはアップロードできているようです。
また、何もファイルを選択せずにアップロードを押してもエラー画面になります。
プロジェクト名はjob_offer,アプリケーション名はjob_offer_appとしています。
下に色々とプログラムを載せてみました。
job_offer/settings.py
(略) INSTALLED_APPS = [ (略) 'job_offer_app.apps.JobOfferAppConfig', ] MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
job_offer_app/templates/index.html
{% load static %} <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>トップページ</title> </head> <body> <h1>csvファイルをアップロードしてください。</h1> <form action="{% url 'home' %}" method="POST" class="post-form" enctype="multipart/form-data"> {% csrf_token %} <input type="file" accept =".csv" name="file"> <button type="submit" class="save btn btn-default">アップロード</button> </form> {% if upload_url %} <p>ファイルのアップロード場所は、<a href="{{ upload_url }}">{{ upload_url }}</a>です。</p> {% endif %} </body> </html>
job_offer/urls.py
from django.contrib import admin from django.conf import settings from django.conf.urls.static import static from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('job_offer_app.urls')), ] if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
job_offer_app/urls.py
from django.conf import settings from django.conf.urls.static import static from django.urls import path from . import views urlpatterns = [ path('', views.index, name="home"), ] # only in development if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
job_offer_app/views.py
from django.shortcuts import render from django.http import HttpResponse from django.core.files.storage import FileSystemStorage def index(request): if request.method == "GET": return render(request, 'index.html') else: file = request.FILES['file'] fileobject = FileSystemStorage() filedata = fileobject.save(file.name, file) upload_url = fileobject.url(filedata) return render(request, 'index.html')
urlsの最後の二行が必要だという記事を見たので、追加してみましたが解決しません。
お願いします。
回答1件
あなたの回答
tips
プレビュー