python - 上传后如何通过 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 %}**
这是我的根项目的 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')
解决方案
在您的 setting.py 中有 MEDIA_ROOT 和 MEDIA_URL。请检查,如果你没有像这样添加: MEDIA_ROOT=os.path.join(BASE_DIR,'media') MEDIA_URL='/media/'
##您将文件存储在根文件夹内的媒体文件夹中的位置
推荐阅读
- dataframe - 我如何在 dict 中只选择主题
- flutter - 自从将 Flutter 从 1.26.0-8.0.pre 更新到 2.2.1 后,Flutter 桌面应用程序在全屏时出现滞后
- rust - rust doc 注释中的额外空格被解释为 doc test
- c# - 我想在列表中添加一个新对象。有人可以解释如何做到这一点吗?
- python - 如何从我的时间戳列中分离 pandas 中的数据
- prestashop - Prestashop 1.7.7.5:FrameworkBundleAdminController:$this->module->getPathUri() 返回错误
- c# - C# - 将 DataReader 转换为 DataTable
- python-3.x - 创建用于修改图例的 GlyphRenderer
- java - 通过 Jackson/Spring REST 资源反序列化枚举字段
- entity-framework-core - 通过 EF Core 从数据库生成 C# 类