django中STATICFILES_DIRS的路径

时间:2012-04-06 20:03:04

标签: django django-settings django-staticfiles

我来自PHP背景,想要提供路径  STATICFILES_DIRS 在settings.py和windows中我明白我需要提供完整的路径,如: D:/path/to/folder/project/static 我想知道有没有办法给出像“/ static /”这样的路径,或者我们可以在PHP中给出dirname(__FILE__)这样的路径吗?

所以我的路径没有硬编码。另外为什么它是物理路径,因为它使用http路径通常不遵循加载CSS文件的物理路径?那么为什么这种方式(物理路径)在django?有人可以解释一下。

感谢大家的提前努力。

6 个答案:

答案 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?