首页 > 解决方案 > 上传后如何通过 URL 访问媒体

问题描述

我正在尝试制作一个博客应用程序,其中每篇文章都有一个特色图片。当我从管理仪表板上传图像时,我可以在我的文件夹中看到图像。但是,当我尝试访问图像的 url 或从源显示图像时,它什么也没显示。

这是我的代码:

模型.py

class Post(models.Model):
    PRIVACY=(
        ('0', 'Public'),
        ('1', 'Private')
    )
    title = models.CharField(max_length=250)
    image = models.ImageField(upload_to="gallery/")
    description = models.TextField()
    status = models.CharField(max_length=8, choices=PRIVACY, default='0')
    tags = TaggableManager()
    published = models.DateField(auto_now_add=True)
    slug = models.SlugField(max_length=58,blank=True,) 


    def save(self, *args, **kwargs):
        slug_save(self) # call slug_save, listed below
        super(Post, self).save(*args, **kwargs)
    def __str__(self):
        return self.title
    def get_absolute_url(self):
        return reverse('src:post_detail',args=[self.slug])
    def get_image(self):
        return self.image.url

视图.py

def home(request):
    posts = Post.objects.order_by('-published')
    template = 'home.html'
    context = {'posts': posts}
    return render(request, template, context)

def post_detail(request,post):
    post = get_object_or_404(Post, slug=post)
    return render(request,'detail.html',{'post': post})

网址.py

app_name = 'src'
urlpatterns = [
    path('', views.home, name='home'),
    path('<slug:post>/',views.post_detail,name='post_detail'),
    ]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
else:
    urlpatterns += staticfiles_urlpatterns()

**主页.html

{% extends 'base.html' %}
{% block content %}
{% for post in posts %}
  <section class="post">
          <h3><a class="post-title"
              href="{{post.get_absolute_url}}">
              {{ post.title }}
          </a></h3>
          <span class="post-meta">
              {{ post.published }}
            <a href="{{post.get_image}}">
              <img src="{{ post.image.url }}" /></a>
          </span>
          <p class="post-excerpt">
              {{ post.description }}
          </p>
  </section>
{% endfor %}
{% endblock content %}**

当我尝试直接从图像 url 访问一些文件时: 在此处输入图像描述

这是我的根项目的 urls.py :

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('site/', include('src.urls')),
]

这是在我的 settings.py 中:

STATIC_URL = '/static/'
STATIC_ROOT = 'static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

标签: pythondjango

解决方案


在您的 setting.py 中有 MEDIA_ROOT 和 MEDIA_URL。请检查,如果你没有像这样添加: MEDIA_ROOT=os.path.join(BASE_DIR,'media') MEDIA_URL='/media/'

##您将文件存储在根文件夹内的媒体文件夹中的位置


推荐阅读