Django - 静态文件夹不在基础项目中
我在把我的“static”文件夹从基础的“django_project”项目中移动出去时遇到了一些麻烦。根据我的经验,Django总是会在基础项目里面寻找“static”文件夹,但我觉得这样看起来不太美观,所以我想把它移到和我其他的Django应用程序放在一起。
这是我现在的文件目录结构。
/home/django/django_project/
/django_project/
/myapplication/
/templates/
/static/
现在,“templates”文件夹工作得很好,我可以毫无问题地找到所有的模板文件。不过,我找不到任何静态文件,静态文件的设置总是让我困惑。
这是我“django_project”基础项目的settings.py文件。
...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/
STATIC_URL = '/static/'
# Go back one directory from this file and move into the 'static' folder
STATICFILES_DIRS = (
os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'static')),
)
# Template files (HTML)
TEMPLATE_DIRS = (
'/home/django/django_project/templates/',
)
有没有人能帮我写出STATIC_URL或STATICFILES_DIR,让它指向我的“/home/django/django_project/static/”文件夹?提前谢谢你。
4 个回答
在settings.py文件中试试这个
STATIC_ROOT = '/path/to/static/folder'
只需要把右边的部分换成你静态文件夹的绝对路径就可以了。
注意:
os.path.abspath(filename)
这个函数会返回你当前工作目录下的文件的绝对路径。它不会检查这个文件是否真的存在。
os.path.dirname
这个函数会查找路径中的目录名。要获取绝对路径的目录名,可以使用 os.path.dirname(os.path.dirname(__file__))
。
BASE_DIR = os.path.dirname(os.path.dirname(file))
而静态文件的 URL 是
STATIC_URL = '/static/'
STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), ]
这个问题的解决方法是把静态文件放到另一个文件夹里,然后创建一个叫做 staticfiles 的目录,具体做法是这样写:STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static/another folder'),]
试试这样做,代码会更简洁。
STATIC_PATH = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'static'))
STATIC_URL = '/static/' # You may find this is already defined as such.
STATICFILES_DIRS = (
STATIC_PATH,
)
STATICFILE_DIRS - 这个是用来指定你本地磁盘上静态文件夹的位置。
STATIC_URL - 这个是用来指定从网络服务器访问静态媒体的URL。
假设你在静态文件夹里有一个叫dragontoothless.jpg的文件。要在你的HTML页面上显示它,你可以这样写。
<img src="/static/dragontoothless.jpg" />
希望这对你有帮助!