Upload Files/Images in Django
Upload images and files in django
To add images into your database, add the below code in your model.
image = models.ImageField(upload_to=get_file_path,null=True,blank=True)
Images can have the same name in some cases and that will cause to unfavourable conditions. So let's create a unique name for images. We are going to add the current dateTime in the image name. Below is the code for doing this operation.
import datetime
def get_file_path(request, filename):
filename_original = filename
nowTime = datetime.datetime.now().strftime('%Y%m%d%H:%M:%S')
filename = "%s%s" % (nowTime, filename_original)
return os.path.join('uploads/', filename)
Open the settings.py file and add the below code:
MEDIA_URL = '/images/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Open the project's urls.py file and paste the below code:
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Now we have to make the form to accept input. I am using model forms and below given is the code.
<form action="" method='POST' enctype = "multipart/form-data">
{% csrf_token %}
<div class="card">
<div class="card-header bg-dark text-center text-white">
<h3 class="">Add Blog</h3>
</div>
<div class="card-body">
{{form.as_p}}
</div>
</div>
<button class="btn btn-primary btn-sm"> Save</button>
</form>
Note : If you are editing an existing form, always remember to add the enctype="multipart/form-data" for accepting the images. Add the csrf_token whenever sending data from the form.
def addblog(request):
form = BlogForm()
if request.method == "POST":
form = BlogForm(request.POST, request.FILES)
form.save()
messages.success(request, "Blog added successfully")
return redirect('/')
context = {'form':form}
return render(request, 'post/add.html', context)