Django 1.8 Slider图像无法显示

时间:2015-09-19 14:09:11

标签: python django image django-templates django-views

在Django 1.8中,我可以上传图像,并将它们保存在它们应该的路径上,但是当我向模板添加<img src="{{ slider.Image.url }}" alt="Slider" />时,图像不会显示。如果我想在网址中仅查看此http://127.0.0.1:8000/static/images/slider/1.jpg的图片,则会显示图片。但是当我转到主页http://127.0.0.1:8000/home/时,它只显示我的alt。

这是我的目录树:

 - home
 - static
 - static/
         css
         images
               slider
         js

图像正确放置在滑块中。 CSS和Js正常工作。

这是我的设置文件

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'home'
)

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

MEDIA_URL = (
    'static/'
)

MEDIA_ROOT = (
    os.path.join(BASE_DIR, 'static')
)

当我使用static_root时,问题变得更严重,没有任何效果。

这是我家中的滑块模型

class Slider(models.Model):
    ImageName = models.CharField(max_length=200)
    Image = models.ImageField(upload_to="images/slider")

这是我的主要网址

from django.conf.urls import include, url, patterns
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^home/', include('home.urls')),
]

from django.conf import settings
urlpatterns += patterns('',
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': False}),
)

这是我的家庭应用网址

from django.conf.urls import url
from .import views


urlpatterns = [
    url(r'^$', views.slider, name='slider',)
]

这是我的模板来源

{% for slider in sliders %}

    <li class="item"><img src="{{ slider.Image.url }}" alt="Slider" /><span class="overlay1"></span></li>

{% endfor %}

1 个答案:

答案 0 :(得分:0)

您不应该混合使用静态文件和媒体文件。静态文件是CSS,JavaScript,图像以及与您的应用程序打包在一起的其他文件,因此它可以正常工作或看起来不错。

媒体文件是从网站上传的文件,或者只是与数据库中某些对象关联的文件。

这些文件不应混合。

此外,STATIC_ROOTSTATICFILES_DIRS不应该指向同一目录。执行STATICFILES_DIRS时,static中的所有文件和每个应用内的STATIC_ROOT目录中的文件都将被复制或链接到./manage.py collectstatic

默认情况下,Django开发服务器不会提供任何媒体文件,如果您希望将其提供,请添加到主urls.py文件中:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)