我是django的新手,我一直在玩上传图片然后显示它们。 ......好尝试来显示它们。
每当我尝试从模板中显示图像时,我只会得到损坏的图像链接图标。
我正在使用sqlite3服务器
settings.py
ROOT_DIR = os.path.dirname(os.path.dirname(__file__))
def location(f):
return os.path.join(ROOT_DIR, f)
MEDIA_URL = 'http://127.0.0.1:8000/media/'
MEDIA_ROOT = location('media/')
models.py
class Image(models.Model):
image = models.ImageField(upload_to = 'images/')
views.py
from imageupload.settings import MEDIA_ROOT, MEDIA_URL
def main(request):
imgs = Image.objects.all()
return render_to_response('index.html', {'images': imgs, 'media_root': MEDIA_ROOT, 'media_url': MEDIA_URL})
url.py
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
现在我刚刚使用管理员上传图片。这似乎工作正常,他们去了我期望的地方
但是当我试图展示它们时:
模板
<!DOCTYPE html>
<html>
<img src="<correct path to project>/media/images/photo_1.JPG" />
{% for img in images %}
<img src="{{ media_root }}{{ img.image.name }}" />
<img src="{{ media_url }}{{ img.image.name }}" />
<img src="{{ img.image.url }}" />
{% endfor %}
</html>
我得到每个人的破碎图标 浏览器源代码显示:
<!DOCTYPE html>
<html>
<img src="<correct path to project>/media/images/photo_1.JPG" />
<img src="<correct path to project>/media/images/photo_1.JPG" />
<img src="http://127.0.0.1:8000/media/images/photo_1.JPG" />
<img src="http://127.0.0.1:8000/media/images/photo_1.JPG" />
</html>
这是有道理的,我只上传了一张照片 如果我复制其中一个硬链接并将其放入其他html文件中......它可以正常工作
答案 0 :(得分:22)
哦FFS ....
aperently它是
MEDIA_URL = '/media/'
不会强>
MEDIA_URL = 'http://127.0.0.1:8000/media/'
...尽管#'http://127.0.0.1:8000/media/'
写在它旁边
工作img链接看起来像这样:
<img src="/media/images/photo_1.JPG" />
你肯定需要:
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
在url文件中
答案 1 :(得分:2)
如果您在开发环境中寻找显示图像,请尝试以下方法:
settings.py
SITE_ROOT = os.path.realpath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(SITE_ROOT, 'static')
MEDIA_URL = '/static/'
STATIC_ROOT = os.path.join(SITE_ROOT, 'statics')
STATIC_URL = '/statics/'
urls.py
# somebody import this from settings
SITE_ROOT = os.path.realpath(os.path.dirname(__file__))
urlpatterns += patterns('',
url(r'^static/(?P<path>.*)$','django.views.static.serve',
{'document_root': os.path.join(SITE_ROOT, 'static')})
)
html视图文件* .html:
<img src="{{ MEDIA_URL }}img/content_top_edit_form.png">
这意味着我们在静态文件夹中有一个 img 文件夹。在你的情况下你可以通过
改变它如果您看到您的浏览器html必须如下所示:
<img src="/static/img/content_top_edit_form.png">
答案 2 :(得分:0)
对我来说,我做了以下两件事:
在 settings.py
中定义媒体网址MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
,然后在项目的 urls.py 中,定义了用于开发和生产目的的服务网址:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('django_app.urls')),
]
# Serving the media files in development mode
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
else:
urlpatterns += staticfiles_urlpatterns()
然后您可以像这样在模板的媒体文件夹中引用图像:
<img src="media/path_to_image" />
注意:不要忘记在生产环境的settings.py中将 DEBUG 标记设置为 False 。