我有一个渲染图像的模板:
{% load staticfiles %}
<img src="{% static "img/logo.png" %}" alt="My image"/>
图片链接已损坏,但它指向:
localhost/static/img/logo.png
我需要为static_root,static_url和STATICFILES_DIRS设置哪些值才能使此图像正确显示?
这是我的目录结构:
myprojectname(顶级)
--- myprojectname
--- --- myproectname
--- --- ---设置
--- --- --- --- base.py(setting.py)
--- ---静态
--- --- --- img
这是我在设置中的静态配置:
STATIC_ROOT = '/Users/myuser/myprojectname/myprojectname'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
#normpath(join(SITE_ROOT, 'static')),
os.path.join(BASE_DIR, "static"),
'/Users/myuser/myprojectname/myprojectname/static',
)
这是它所显示的:
我已经完成了一个收集站,这不起作用。
答案 0 :(得分:18)
Django中的静态文件可能会造成混淆。我会尽可能简单地解释......
STATIC_ROOT
这是您应该在 生产 中提供静态文件的目录。
STATICFILES_DIRS
这是您应该在 开发 中提供静态文件的目录。
STATIC_ROOT和STATICFILES_DIRS无法指向同一目录。
Django是一个高度模块化的框架。一些应用程序模块包含自己的模板,css,图像和JavaScript。 Django管理员就是这样一个应用程序。 Django通过在开发与生产中使用静态文件的不同目录,将这种模块性扩展到您创建的应用程序。
当DEBUG = True
和django.core.staticfiles
中包含INSTALLED_APPS
时,Django将使用STATICFILES_DIRS
路径作为STATIC_URL
元组提供位于DEBUG = False
元组中的文件起点。
在制作中,应该对Nginx,Apache,CloudFront等负责。当$ python manage.py collectstatic
时,Django不会自动提供任何静态文件。
当你跑步时:
{{1}}
将STATICFILES_DIRS中指定的文件复制到要部署的STATIC_ROOT中。
所以,为了回答你的问题,我会做以下事情:
创建另一个目录以将静态文件存储在开发中,并将该路径添加到STATICFILES_DIRS。我通常称这个文件夹为#34; static-assets&#34;。它可以与您现有的&#34;静态&#34;处于同一级别。 。目录
将STATIC_ROOT设置为现有&#34;静态&#34;的路径。 。目录
如果仔细查看屏幕截图中返回404的路径,则图像路径指定为:/static/img/logo.png,但图像目录为:/ static / image /
请仔细检查您的图片路径,确保您指向正确的目录。
答案 1 :(得分:4)
制作文件夹&#34; staticfiles&#34;在您的项目的根目录中,settings.py存在
在静态文件中你可以这样..
在settings.py中
STATIC_ROOT = os.path.join(PROJECT_DIR,'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(PROJECT_DIR,'staticfiles'), # if your static files folder is named "staticfiles"
)
TEMPLATE_DIRS = (
os.path.join(PROJECT_DIR,'template'), # if your static files folder is named "template"
)
在base.html中
<link rel="stylesheet" type="text/css" href="{% static 'css/demo.css' %}" />
<script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
在其中包含base.html
的其他模板文件中{% extends "base.html" %}
{% load static %}
<script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
<div id="yourID" class="yourClass">
<img src="{% static "images/something.gif" %}" alt="something" >
</div>
答案 2 :(得分:2)
如果您处于开发模式,则只需定义一行:
STATICFILES_DIRS = ( os.path.join('static'), )
您不需要定义STATIC_ROOT ='/ Users / myuser / myprojectname / myprojectname'
OR
STATICFILES_DIRS为BASE_DIR
因此,可行的解决方案是:
STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join('static'), )