Django - 静态文件夹不在基础项目中

2 投票
4 回答
3059 浏览
提问于 2025-04-19 02:13

我在把我的“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 个回答

-3

在settings.py文件中试试这个

STATIC_ROOT = '/path/to/static/folder'

只需要把右边的部分换成你静态文件夹的绝对路径就可以了。

0

注意:

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"), ]

1

这个问题的解决方法是把静态文件放到另一个文件夹里,然后创建一个叫做 staticfiles 的目录,具体做法是这样写:STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static/another folder'),]

2

试试这样做,代码会更简洁。

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" />

希望这对你有帮助!

撰写回答