- In your Django project settings, configure the
MEDIA_ROOT
and MEDIA_URL
settings to specify the directory where uploaded media files will be stored and the URL prefix for serving those files.
# settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
- In your project's main
urls.py
, include the necessary URL patterns to serve media files during development.
# urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... your other URL patterns ...
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
- In your model, add a
FileField
or ImageField
to represent the uploaded media file.
# models.py
from django.db import models
class YourModel(models.Model):
# ... your other fields ...
media_file = models.FileField(upload_to='your_upload_path/')
- Create migrations and apply them to update the database schema.
python manage.py makemigrations
python manage.py migrate
- In your HTML templates, use the
url
attribute of the media file field to display or link to the uploaded media.
<!-- template.html -->
<img src="{{ your_model_instance.media_file.url }}" alt="Your Media">
- In your forms, use the
FileInput
widget to allow users to upload media files.
# forms.py
from django import forms
from .models import YourModel
class YourModelForm(forms.ModelForm):
class Meta:
model = YourModel
fields = ['media_file']
widgets = {
'media_file': forms.FileInput(attrs={'accept': 'image/,video/'}),
}
- Handle media file uploads in your views. Ensure you have the necessary form handling logic, and use the
request.FILES
when processing file uploads.
# views.py
from django.shortcuts import render, redirect
from .forms import YourModelForm
def upload_media(request):
if request.method == 'POST':
form = YourModelForm(request.POST, request.FILES)
if form.is_valid():
instance = form.save()
# ... additional logic ...
return redirect('success_url')
else:
form = YourModelForm()
return render(request, 'upload_media.html', {'form': form})
- Create a view to serve uploaded media files in production. Use a web server like Nginx or Apache to serve media files efficiently.
# urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... your other URL patterns ...
]
if not settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)