我来自PHP背景,想要提供路径
STATICFILES_DIRS
在settings.py和windows中我明白我需要提供完整的路径,如:
D:/path/to/folder/project/static
我想知道有没有办法给出像“/ static /”这样的路径,或者我们可以在PHP中给出dirname(__FILE__)
这样的路径吗?
所以我的路径没有硬编码。另外为什么它是物理路径,因为它使用http路径通常不遵循加载CSS文件的物理路径?那么为什么这种方式(物理路径)在django?有人可以解释一下。
感谢大家的提前努力。
答案 0 :(得分:14)
在我的settings.py文件中,我总是这样做
import os
ROOT_PATH = os.path.dirname(__file__)
然后你可以做
STATICFILES_DIRS = [os.path.join(ROOT_PATH, 'static')]
STATICFILES_DIRS
需要文件系统路径的原因是它需要知道文件在操作系统中的位置(因此可以使用manage.py collectstatic
之类的东西)。 STATIC_URL
设置适用于网络服务器路径,这是用于在管理员或{% static %}
标记中向用户显示的内容。 STATICFILES_DIRS
仅限服务器端,并且永远不会出现在任何呈现的模板或任何内容中。
答案 1 :(得分:1)
回答你的问题是错误的。如果您喜欢这样,您将收到下一个错误:
ImproperlyConfigured: Your STATICFILES_DIRS setting is not a tuple or list; perhaps you forgot a trailing comma?
我的决定是在settings.py文件中添加下一个函数:
import os def look_folder_tree(root): result = () for dir_name, sub_dirs, file_names in os.walk(root): for sub_dir_name in sub_dirs: result += (os.path.join(dir_name, sub_dir_name),) return result # Django settings for project. PROJECT_DIR = os.path.dirname(__file__)
并在以下位置调用 look_folder_tree 功能:
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/"
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
# URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/"
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = look_folder_tree(STATIC_ROOT)
我的决定是允许在静态目录中添加所有子文件夹。
答案 2 :(得分:1)
找到* settings.py8文件,
把:
STATICFILES_DIRS=(os.path.join(BASE_DIR,'static'))
更改为:
STATICFILES_DIRS=[(os.path.join(BASE_DIR,'static'))]
答案 3 :(得分:0)
请注意,逗号后面只能使用STATICFILES_DIRS作为元组。
forEach
或者您可以将STATICFILES_DIRS用作列表数据类型,此处不需要以逗号结尾:
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
答案 4 :(得分:0)
您的语法是正确的,我想您忘记了在第一行代码中将os导入为import os。
答案 5 :(得分:0)
改变这个:
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'))
为此:
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
最后加一个逗号,
ERRORS:
?: (staticfiles.E001) The STATICFILES_DIRS setting is not a tuple or list.
HINT: Perhaps you forgot a trailing comma?