0

我想在我的网站上显示图像。我一直在查看 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. 我该怎么做才能显示我的图像?

4

5 回答 5

2

我在显示静态图像时遇到了同样的问题。在这方面吃了不少苦头,也花了很多时间。所以想分享我的设置。

设置.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',  
)

网址.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" />
于 2013-06-12T12:16:01.713 回答
2

您需要做的就是将 settings.py 编辑为以下 4 点,并在同一文件夹中创建一个新文件夹(静态)settings.py 位于静态文件夹中,您可以在其中创建另一个文件夹(图像)把(under_construction.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!" />

于 2012-06-13T01:39:02.780 回答
0

我已经解决了这样的问题。

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

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

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

这仅适用于调试模式。您需要在 settings.py 文件中设置 DEBUG = true 。这应该适用于 django 的开发服务器。

Django 不会在生产模式中提供任何静态文件。您需要在生产模式中使用 web-server 提供静态文件。

更多信息可以在这里找到..

于 2012-06-12T04:10:16.027 回答
0

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

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

用于 Apache 中的生产设置

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

于 2012-06-12T04:11:29.447 回答
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 非常好)。

于 2012-06-12T04:50:17.340 回答