Hi All,
I am trying to server the user uploads image. But in template post.image.url provides empty in browser end.
settings.py:
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = "django-insecure-@)9x@9-ve2u&u@@%#16yg+iwp-rbrd2z628+t8upj4yre&+t&@"
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
"fileupload",
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ROOT_URLCONF = "fileuploaddemo.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
WSGI_APPLICATION = "fileuploaddemo.wsgi.application"
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
AUTH_PASSWORD_VALIDATORS = [
{
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
},
{
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
},
{
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
},
{
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
},
]
LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True
STATIC_URL = "static/"
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
MEDIA_ROOT = os.path.join(BASE_DIR, "uploads/")
MEDIA_URL = "uploads/"
project level urls.py:
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path("admin/", admin.site.urls),
path("", include("fileupload.urls")),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
app level urls.py:
from django.urls import path
from .views import FileUpload, Files
urlpatterns = [
path("", FileUpload.as_view(), name="home"),
path("files", Files.as_view(), name="files"),
]
views:
from django.shortcuts import redirect, render
from django.views import View
from .form import UserUploads
from .models import File
# Create your views here.
class FileUpload(View):
def get(self, request):
return render(request, "home.html", {"form": UserUploads})
def post(self, request):
form = UserUploads(request.POST, request.FILES)
if form.is_valid():
form_data = form.cleaned_data
image = form.cleaned_data["file"]
File(title=form_data["title"], image_name=image).save()
return redirect("files")
else:
return render(request, "home.html", {"form": form})
class Files(View):
def get(self, request):
data = File.objects.all().values()
for i in data:
print(i["title"])
print(i["image_name"])
return render(request, "file.html", {"posts": data})
models.py:
from django.db import models
class File(models.Model):
title = models.CharField(max_length=100)
image_name = models.FileField(upload_to="media/")
form.py:
from django import forms
class UserUploads(forms.Form):
title = forms.CharField(max_length=100)
file = forms.FileField()
template:
<!DOCTYPE html>
<html>
{% for post in posts %}
<h2> {{ post.title }}</h2>
<img src="{{ post.image_name.url }}" alt="{{ post.title }}" />
{% endfor %}
</html>
I checked given Media root directory able to see file present there once uploaded via browser but when I try to server the image but not providing to browser.
Please review my code and tell me where I am doing mistake ?
thanks in advance