在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 %}
答案 0 :(得分:0)
您不应该混合使用静态文件和媒体文件。静态文件是CSS,JavaScript,图像以及与您的应用程序打包在一起的其他文件,因此它可以正常工作或看起来不错。
媒体文件是从网站上传的文件,或者只是与数据库中某些对象关联的文件。
这些文件不应混合。
此外,STATIC_ROOT
和STATICFILES_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)