我正在尝试在网页上显示用户上传的图像。当我使用Django管理界面上传图像文件时(我为图库图像创建了一个filefield模型),图像被正确地存储在/media/images中。我在www.example.com中设置了如下媒体设置settings.py:
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
项目urls.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)
图库urls.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)
图库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 %}
当我创建一个图库图像时,弹出一个损坏的图像,但该图像无法正确访问。
3条答案
按热度按时间yrwegjxp1#
我这样做,我就可以从Django开发服务器提供媒体文件:
只需将其包含在项目urls.py中就足够了。
您的问题可能是您在www.example.com中输入的媒体URLurls.py不正确。您似乎与媒体文件的实际URL不匹配,该文件可能类似于
/media/something.png
。你似乎只是在/media/
上取得资格。我还认为你的正则表达式应该是^media/
,而不是/media/
。fhity93d2#
1.从
gallery.urls
文件中删除static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
部分。1.将
src="g.imgfile.url"
替换为src="{{ g.imgfile.url }}"
。{"text1":texts[0].text,...
)传递到模板中?这是容易出错和不好的做法。你应该只传递'texts': texts
,然后在你的模板中用{% for text in texts %}
forloop迭代它们。因此,render
方法应该类似于render(request, 'index.html', {'texts': texts, 'gallery': gal})
。9o685dep3#
同时确保你没有一个通配符URL模式,它会覆盖其他应用程序中的媒体URL /media/。