এই মডিউলে আমরা দেখব প্রজেক্টে ব্যবহৃত মিডিয়া ফাইলগুলো কিভাবে ম্যানেজ করতে পারি ।
শুরুতেই blog_project/settings.py ফাইলে MEDIA_URL এ্যাড করে নিই-
প্রজেক্টের urls.py নিচের মত করে লিখি-
Code:: 11.4.1
blog_project/urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='homepage'),
path('category/<slug:category_slug>/', views.home, name='category_wise_post'),
path('author/', include('author.urls')),
path('post/', include('posts.urls')),
path('category/', include('categories.urls')),
]
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
১৪ নং লাইনে settings এর MEDIA_URL কে urlpatterns এর সাথে এ্যাড করা হয়েছে যেন মিডিয়া ফাইলগুলো URL-এর সাহায্যে এক্সেস করতে পারি
আমরা চাচ্ছি Post মডেলের জন্য ImageField রাখতে যেন প্রতিটি পোস্টে একটি করে ইমেজ রাখা যায়-
Code:: 11.4.2
posts/models.py
from django.db import models
from categories.models import Category
from django.contrib.auth.models import User
# Create your models here.
class Post(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
category = models.ManyToManyField(Category) # ekta post multiple categorir moddhe thakte pare abar ekta categorir moddhe multiple post thakte pare
author = models.ForeignKey(User, on_delete=models.CASCADE)
image = models.ImageField(upload_to='posts/media/uploads/', blank = True, null = True)
def __str__(self):
return self.title
১০ নং লাইনে image ফিল্ডের জন্য blank = True, null = True করা হয়েছে কেননা Post মডেলে এক্সিস্টিং ডেটা উলোতে কোনো ইমেজ ছিল না, upload_to এ্যাট্রিবিউটে বলা হয়েছে ফিলডটিতে ইমেজ আপলোড করা হলে সেগুলো কোথা সেভ হবে।
মডেলে ImageField ব্যবহার করতে হলে Pillow মডিউল ইন্সটল করে নেয়া জরুরি-
python -m pip install Pillow
এবার, makemigrations , migrate কমান্ড রান করি ।
পোস্টগুলো আমরা templates/home.html ফাইলে দেখব, templates/home.html ফাইল কিছুটা পরিবর্তন করে নিচের মত করে লিখি-
Code:: 11.4.3
templates/home.html
{% extends 'base.html' %}
{% load static %}
{% block content %}
<div class="d-flex flex-wrap px-5 pt-3 align-items-center">
<div class="col-6">
<h1>Welcome to Django Blog</h1>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Voluptatibus dolorum delectus necessitatibus temporibus adipisci, harum enim unde, suscipit in ipsum provident hic minima molestias reiciendis nihil veniam aut doloribus, ab quidem sit cum at nemo nulla autem! Dolor quaerat ea voluptatem ullam, consequuntur quisquam ut iste. Vitae exercitationem ipsum blanditiis. Nihil rem in quo magni quam sapiente ad ipsa voluptatum saepe quos temporibus, at iste? Eum saepe eos error ea recusandae, deserunt at quidem odio harum inventore. Necessitatibus eos sapiente architecto optio aut esse, facilis, voluptatibus assumenda ut exercitationem nobis molestias, quisquam nam quia odio ipsa? Voluptatem voluptas distinctio eaque.</p>
</div>
<div class="col-6">
<img src="{% static 'header.jpg' %}" />
</div>
</div>
<div class="d-flex flex-wrap p-4">
<div class="col-2 bg-white p-3" >
<h5>All Categories</h5>
{% for cat in category %}
<div class="form-check">
<input
class="form-check-input"
type="radio"
name="category"
id="{{cat.id}}"
/>
<label class="form-check-label" for="{{cat.id}}">
<a href="{% url 'category_wise_post' cat.slug %}" class="text-decoration-none text-dark" >{{cat.name}}</a>
</label>
</div>
{% endfor %}
</div>
<div class="col-10 p-3">
<h4>{{data | length}} results found</h4>
<div class="d-flex flex-wrap pt-5">
{% for post in data %}
<div class="col-sm-3">
<div class="card m-2">
<div class="card-body">
<img src="{{post.image.url}}" class="card-img-top" alt="...">
<p class="card-text">{{post.content |truncatewords:10}}</p>
<p>Author : {{post.author.first_name}} {{post.author.last_name}}</p>
<p>
Category : {% for cat in post.category.all %}
<button class="btn btn-primary btn-sm m-2" disabled>
{{cat.name}}
</button>
{% endfor %}
</p>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
{% endblock %}
৪৪ নং লাইনে <img> ট্যাগের সোর্স হিসেবে রিলেভেন্ট পোস্টের ইমেজের URL সেট করা হয়েছে
এবার প্রজেক্ট রান করে নতুন পোস্ট তৈরির সময় ইমেজ আপলোড করলে রিলেভেন্ট পোস্টে ইমেজগুলো দেখতে পাব, সেই সাথে posts/media/uploads ডিরেকটরি খেয়াল করলে দেখতে পাব ইমেজগুলো আপলোড হয়েছে-