如何在Django的网页上显示图像?

时间:2012-06-12 03:47:18

标签: python django django-templates django-views

我想在我的网站上显示图片。我一直在浏览Django文档以及stackoverflow上的其他帖子,但我还没有让它工作。
我有一个图像名称'under-construction.jpg'。它位于/home/di/mysite/myapp/static/images目录中。

我有一个这样的模板:

<img src="{{ STATIC_URL }}images/under_construction.jpg" alt="Hi!" />

在我的views.py中我有这个:

def under_construction(request):
    return render(request, 'under_construction.html')

在我的settings.py中,我有这个:

STATIC_ROOT = ''

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    '/home/di/mysite/myapp/static',
    '/home/di/mysite/myapp/static/images',
)

我执行了./manage.py collectstatic,它在/home/di/mysite/admin/home/di/mysite/images中放了很多文件。我该怎么办才能让我的图像出现?

5 个答案:

答案 0 :(得分:2)

您需要做的就是将settings.py编辑为以下4个点并在相同的文件夹settings.py中找到一个新文件夹(静态) 在static文件夹中你可以创建另一个文件夹(images)你可以放(under_constructioon.jpg)

  1. STATICFILES_DIRS = (os.path.join( os.path.dirname( __file__ ), 'static' ),)

  2. STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder',)

  3. STATIC_URL = '/static/'

  4. STATIC_ROOT = ''

    在你完成了上一次之后。你可以写点数 <img src="{{ STATIC_URL }}images/under_construction.jpg" alt="Hi!" />

答案 1 :(得分:2)

我在显示静态图像方面遇到了同样的问题。在这方面经历了很多,并花了很多时间。所以想分享我的设置。

settings.py

STATIC_ROOT = ''  
STATIC_URL = '/static/'      
ADMIN_MEDIA_PREFIX = '/static/admin/'          

import os.path  

STATICFILES_DIRS = (      
    "D:/temp/workspace/offeronline/media",
    (os.path.join( os.path.dirname( __file__ ), 'static' )),  
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',  
)

urls.py

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    # ... the rest of your URLconf here ...  and at the end of the file add the following line
urlpatterns += staticfiles_urlpatterns()  

最后将以下代码添加到模板标记中并且工作正常

<img src="{{ STATIC_URL }}images/i1.png" />

答案 2 :(得分:0)

我已经解决了这个问题。

STATIC_ROOT = '/path/to/project/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
)

即使你这样做,Django也不会直接直接获取文件。您需要为您的每个应用程序链接此静态目录。只需按照命令转到django app dir run ..

cd /path/to/project/my_proj/my_app
ln -s /path/to/project/static/

这只适用于debug mod。您需要在settings.py文件中设置DEBUG = true。这应该适用于Django的开发服务器。

Django不会在生产mod中提供任何静态文件。您需要在生产模式中使用Web服务器提供静态文件。

可以找到更多信息here ..

答案 3 :(得分:0)

Django在开发过程中支持静态文件,您可以使用django.views.static.serve()方法来提供媒体文件。

但是使用这种方法对于生产设置效率低且不安全。

用于Apache中的生产设置

https://docs.djangoproject.com/en/1.2/howto/deployment/modpython/#serving-media-files

答案 4 :(得分:0)

设置STATIC_ROOT = /path/to/copy/files/to

你添加了

urlpatterns += patterns('django.contrib.staticfiles.views', url(r'^static/(?P<path>.*)$', 'serve'),

或者您也可以这样做

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

# ... the rest of your URLconf here ...

urlpatterns += staticfiles_urlpatterns()

当然尝试不通过django服务器静态文件它确实有一些开销而是配置你的http服务器为它们服务,假设你有一个http服务器(nginx非常好)。