2

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

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

提前感谢大家的努力。

4

6 回答 6

19

在我的 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

于 2012-04-06T20:08:44.007 回答
4

在项目中找到settings.py文件,

放:

STATICFILES_DIRS=(os.path.join(BASE_DIR,'static'))

改成:

STATICFILES_DIRS=[(os.path.join(BASE_DIR,'static'))]
于 2018-06-10T18:07:14.830 回答
1

对你的问题的回答是错误的。如果你这样做,你会得到下一个错误:


ImproperlyConfigured: Your STATICFILES_DIRS setting is not a tuple or list; perhaps you forgot a trailing comma?

我的决定是在 settings.py 文件的顶部添加下一个函数:

导入操作系统

def look_folder_tree(根):
    结果 = ()
    对于 os.walk(root) 中的 dir_name、sub_dirs、file_names:
        对于 sub_dirs 中的 sub_dir_name:
            结果 += (os.path.join(dir_name, sub_dir_name),)
    返回结果

# 项目的 Django 设置。

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)

我的决定是允许在静态目录中添加所有子文件夹。

于 2013-08-05T02:17:08.550 回答
1

In settings.py: Import os (在创建 django 项目时已经完成)

import os

您可以只使用 STATICFILES_DIRS 作为元组,注意尾随逗号。

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

或者您可以使用 STATICFILES_DIRS 作为列表数据类型,此处不需要末尾的逗号:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]
于 2019-08-18T10:38:33.303 回答
1

改变这个:

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?
于 2021-07-21T15:51:18.153 回答
0

您的语法是正确的,我认为您忘记在代码的第一行将 os 导入为 import os。

于 2020-08-13T22:40:55.680 回答