gpt4 book ai didi

Django 网站在提供静态文件时遇到问题

转载 作者:行者123 更新时间:2023-12-04 20:50:55 25 4
gpt4 key购买 nike

我正在开发一个多应用网站。我有一堆菜鸟问题。我的目录结构如下所示:

/var/www/html/portal
src/
manage.py
portal/
static/
admin/
css/
img/
js/
fonts/
templates/
base.html
homepage.html
venv/
  1. 我的目录结构是否符合 Django 标准?
  2. 我的STATIC 文件设置是否正确?

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

或者应该是

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
  1. 我应该在复制所有静态文件(如 css、js 等)之后collectstatic 还是在复制这些目录中的文件之前执行此操作?
  2. 如果我在不提及 STATIC_ROOT 的情况下执行 collectstatic 我会得到一个异常django.core.exceptions.ImproperlyConfigured:您正在使用 staticfiles 应用程序,但没有将 STATIC_ROOT 设置设置为文件系统路径。

但是当我用以下内容替换 STATICFILES_DIRS 时,我的 .css 文件停止服务。我做错了什么?

STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')

最佳答案

当您运行开发服务器并且 DEBUG 设置为 True 时,您不需要运行 staticfiles

静态和媒体文件可以直接通过网络进程 ( Docs ) 将这些行添加到您的主要 urls.py:

if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

至于整个STATIC_URLSTATIC_ROOTMEDIA_URLMEDIA_ROOT,它们都与如何您将使用适当的网络服务器在生产环境中提供您的应用程序。

然后通常发生的是网络服务器(即 Nginx)处理服务文件,而不是 Django 应用程序。但是 Django 应用程序需要知道它们在哪里。所以:

STATIC_URLMEDIA_URL 需要在您的 Django 应用设置和网络服务器配置中相同,例如使用 Nginx:

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
...

location /static {
alias /home/myusername/myproject/static/;
}
location /media {
alias /home/myusername/myproject/media/;
}

STATIC_ROOT MEDIA_ROOT 100% 与您希望如何在服务器上构建项目有关。假设以上情况,您需要弄清楚如何将其指向 /home/myusername/myproject/static/

我的设置示例:

BASE_DIR = Path(__file__).parent.parent.parent

MEDIA_URL = '/media/'
MEDIA_ROOT = str(BASE_DIR.joinpath('media'))

STATIC_URL = '/static/'
STATIC_ROOT = str(BASE_DIR.joinpath('staticfiles'))

媒体文件将直接上传到 MEDIA_ROOT,但请注意,您需要以某种方式从您的应用程序中获取静态文件(这些文件可能位于多个文件夹中,您使用的库可能有一些额外的静态文件,然后 Django Admin 等)到 Nginx 指向的文件夹(应该与 STATIC_ROOT 相同)。这就是 collectstaticfiles 发挥作用并将所有静态文件复制到该目录的地方。

关于Django 网站在提供静态文件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42860599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com