django没有显示图像

Asw*_*esh 2 django image

我开始使用django应用程序并尝试在主页中显示图像.但是图像没有显示出来.

我的settings.py:

MEDIA_ROOT = os.path.join(BASE_DIR,"media")
MEDIA_URL = "/media/"
Run Code Online (Sandbox Code Playgroud)

我的urls.py:

urlpatterns = patterns('',
# Examples:
# url(r'^$', 'myapp.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),

url(r'^admin/', include(admin.site.urls)),
url(r'',include('users.urls')),
) 

urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

我的home.html:

<html>
    <head>
            <title>MY SITE</title>
    </head>
    <body>
            <img src="/media/image/myimage.jpg" alt="my image"/>
            Welcome to my site
    </body> 
</html>
Run Code Online (Sandbox Code Playgroud)

my image显示文本而不是图像

Jef*_*eld 9

好的,所以我设置了一个简单的"配对"工作示例,因此没有移动的部件丢失.一些说明:

这意味着你需要破解你的MEDIA引用.(MEDIA实际上是用于文件上传的),你不需要在urls.py文件中使用staticfiles_urlpatterns.当你在settings.py中添加'django.contrib.staticfiles'时,你会得到这种开箱即用的行为

概述:这是你的文件树布局在django 1.6中的样子,以及我在这个答案中引用的文件结构.

??? djproj
?   ??? __init__.py
?   ??? settings.py
?   ??? urls.py
?   ??? wsgi.py
??? manage.py
???? myapp
    ??? admin.py
    ??? __init__.py
    ??? models.py
    ??? static
    ?   ??? myapp
    ?       ??? myimage.jpg
    ??? templates
    ?   ??? index.html
    ??? tests.py
    ??? views.py
Run Code Online (Sandbox Code Playgroud)

第1步:确保您的INSTALLED_APPS中包含django.contrib.staticfiles.

第2步:在您的设置文件中,定义STATIC_URL,例如:

STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)

第3步:将home.html更改为这样(我在我的示例中使用了index.html)

[PROJECT_HOME/myapp/templates/index.html]

<html>
<head>
        <title>MY SITE</title>
</head>
<body>
    {% load staticfiles %}
    <img src="{% static "myapp/myimage.jpg" %}" alt="My image"/>
        Welcome to my site
</body> 
</html>
Run Code Online (Sandbox Code Playgroud)

请务必阅读与STATICFILES_STORAGE相关的django-1.6 staticfiles文档,以便了解这些模板标签为您带来的收益.暗示:python manage.py collectstatic

第4步:(您可能已经完成了此操作,但我没有看到它)确保您的settings.py中定义了TEMPLETE_DIRS并包含您的home.html(这里的关键是django的模板引擎需要为此提供服务)将使用一些模板标签)

[PROJECT_HOME/djproj/settings.py]

TEMPLATE_DIRS = (
   # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
   # Always use forward slashes, even on Windows.
   # Don't forget to use absolute paths, not relative paths.
   BASE_DIR + '../myapp/templates',
)
Run Code Online (Sandbox Code Playgroud)

第5步:构建一个呈现home.html页面的视图.

[PROJECT_HOME/myapp/views.py]

from django.shortcuts import render_to_response

def index( request ):
   return render_to_response('index.html')
Run Code Online (Sandbox Code Playgroud)

由于这有点令人费解,而且这里有几个动人的部分:这里有一个变更集,显示完整的"变化"

如果任何一个混乱,你可以粗略地拉动整个github项目. Django的staticfiles-setupexample

最后注意:在django中并不总是以这种方式处理STATIC文件.MEDIA目录曾经是您追求的设置.所以这个答案适用于Django 1.6(静态文件是在django 1.3版中添加的)(目录布局在django 1.5中已经更改).

您可以(正如您尝试的那样)将您的媒体目录硬连接到STATIC定义.我也这样做 - 不推荐这个.这就是为什么我没有这样描述如何做到这一点.