Python Django中未显示媒体文件
我试图在网页上显示用户上传的图像。当我使用Django管理界面上传图像文件时(我为画廊图像制作了一个带有文件字段的模型),图像正确地存储在/media/images中。我在settings.py中设置了媒体设置,如下所示:Python Django中未显示媒体文件,python,django,Python,Django,我试图在网页上显示用户上传的图像。当我使用Django管理界面上传图像文件时(我为画廊图像制作了一个带有文件字段的模型),图像正确地存储在/media/images中。我在settings.py中设置了媒体设置,如下所示: MEDIA_URL = "/media/" MEDIA_ROOT = os.path.join(BASE_DIR, "media") 项目URL.py: from django.conf.urls import include, url from django.contri
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
项目URL.py:
from django.conf.urls import include, url
from django.contrib import admin
import gallery.views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('gallery.urls')),
]+ static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
Gallery URL.py:
from django.conf.urls import url
from django.conf import settings
from django.conf.urls.static import static
from . import views
urlpatterns = [
url(r'^', views.homepage, name = 'home'),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Gallery views.py:
def homepage(request):
texts = Sitetext.objects.all()
gal = Galleryimg.objects.all()
gal.order_by('position')
return render(request,'index.html', {"text1":texts[0].text,"text2":texts[1].text,"text3":texts[2].text,"text4":texts[3].text,"title1":texts[0].title,"title2":texts[1].title,"title3":texts[2].title,"title4":texts[3].title,"gallery":gal})
然后这是访问图像的模板代码部分:
{% for g in gallery %}
<div class="col-md-3 col-sm-4 col-xs-6">
<img class="img-responsive" src="g.imgfile.url" />
</div>
{% endfor %}
{%g在gallery%}
{%endfor%}
创建库图像时,会弹出一个损坏的图像,但该图像无法正确访问
gallery.URL
文件中删除静态(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)
部分src=“g.imgfile.url”
替换为src=“{{g.imgfile.url}”
旁白:为什么要将这本大词典(
{“text1”:text[0]。text,
)传递给模板?这是一种容易出错的错误做法。您应该传递'text':text
,然后在模板内使用{%for text in text%}对它们进行迭代因此,render
方法应该类似于render(请求,'index.html',{'text':text,'gallery':gal})
我这样做,并且我能够从Django开发服务器提供媒体文件:
urlpatterns += [
url(r'^media/(?P<path>.*)$', django.views.static.serve, {
'document_root': settings.MEDIA_ROOT}),]
urlpatterns+=[
url(r'^media/(?P.*)$),django.views.static.service{
“document\u root”:settings.MEDIA\u root}),]
仅在项目url.py中包含这些内容就足够了
您的问题可能是URL.py中的媒体URL条目不正确。您似乎与媒体文件的实际URL不匹配,这可能类似于/media/something.png
。您似乎只是在/media/
上进行了限定。我还认为您的正则表达式应该是^media/
,而不是/media>/代码>我同时执行了1.和2.并且文件仍然没有显示。我相信url是正确的,因为:In[3]:from gallery.models导入gallerymg In[4]:gallerymg.objects.all()Out[4]:In[5]:gallerymg.objects.all()[0]Out[5]:In[6]:gallerymg.objects.all()[0]。imgfile Out[6]:In[7]:Galleryimg.objects.all()[0].imgfile.url Out[7]:“/media/images/20150223_083553.jpg”所以,如果你点击url127.0.0.1:8000/media/images/20150223_083553.jpg
,你会得到一个404,对吗?如果是这样,试试这个:在你的url.py
文件中,把这个放在顶部从django.views.static import服务中删除(settings.MEDIA\u URL…
和addurlpatterns+=[URL(r'^MEDIA/(?P.*),serve,{'document\u root:settings.MEDIA\u root})]
。不,图像加载得很好。啊!我更改了URL文件,现在显示出来了!感谢您的帮助。请提供更多信息,以便帮助他人。也许可以更新我的答案以反映这些更改。