首页 > 解决方案 > 如何在 Django 框架上加载我的媒体文件?

问题描述

我无法上传我的媒体文件。在 URL 中,我注意到出现了文本“课程”,而不是“媒体”

( http://127.0.0.1:8000/**cursos**/courses/images/pythondev.png )

( http://127.0.0.1:8000/**media**/courses/images/pythondev.png )

设置.py

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

网址.py

from django.contrib import admin
from django.urls import path, include

# Import settings to load image on DEBUG MODE
from django.conf import settings
from django.conf.urls.static import static

admin.autodiscover()

urlpatterns = [
 path('', include('core.urls')),
 path('cursos/', include('courses.urls')),
 path('admin/', admin.site.urls),
 ]

 urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT

课程\urls.py

from django.urls import path, include

from courses import views

app_name = 'courses'
 urlpatterns = [
 path('', views.index, name='index')
 ]

课程\view.py

from django.shortcuts import render


# Create your views here.

from .models import Course


def index(request):
 courses = Course.objects.all()
 template_name = 'courses/index.html'
 context = {
  'courses': courses
 }
 return render(request, template_name, context)

课程\models.py

from django.db import models

   
class CourseManager(models.Manager):

    def search(self, query):
        return self.get_queryset().filter(
            models.Q(name__icontains=query) |
            models.Q(description__icontains=query)
        )


class Course(models.Model):

    name = models.CharField('Nome', max_length=100)
    slug = models.SlugField('Atalho')
    description = models.TextField('Descrição', blank=True)
    start_date = models.DateField(
        'Data de Início', null=True, blank=True
    )
    image = models.ImageField(
        upload_to='courses/images', verbose_name='Imagem',
        null=True, blank=True
    )

    created_at = models.DateTimeField(
        'Criado em', auto_now_add=True
    )
    update_at = models.DateTimeField('Atualizado em', auto_now=True)

    objects = CourseManager()

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Curso'
        verbose_name_plural = 'Cursos'
        ordering = ['-name']

更新的文件如下

标签: pythondjangodjango-media

解决方案


您可以在 jinja2 模板中使用静态 url 来访问资产。试试https://realpython.com/primer-on-jinja-templating/链接。


推荐阅读