我想在我的网站上显示图片。我一直在浏览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
中放了很多文件。我该怎么办才能让我的图像出现?
答案 0 :(得分:2)
您需要做的就是将settings.py编辑为以下4个点并在相同的文件夹settings.py中找到一个新文件夹(静态) 在static文件夹中你可以创建另一个文件夹(images)你可以放(under_constructioon.jpg)
STATICFILES_DIRS = (os.path.join( os.path.dirname( __file__ ), 'static' ),)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',)
STATIC_URL = '/static/'
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非常好)。