【问题标题】:Django, serving static files [duplicate]Django,提供静态文件[重复]
【发布时间】:2023-07-30 05:25:01
【问题描述】:

我有多个应用程序,每个应用程序都有静态文件。 而且我还想添加一些全局静态文件,比如 jQuery。

我的项目结构是这样的

--mysite

  |------app1

     |-----static

  |------app2

     |-----static

  |------app3

     |-----static


  |------media
  |------static    (global one)

     |-----app1
     |-----app2
     |-----app3

我的设置文件是这样的

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

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'

和url文件是一样的

urlpatterns = [
url(r'^$', 'home.views.index'),
url(r'^admin/', include(admin.site.urls)),
url(r'^users/', include('users.urls')),
url(r'^projects/', include('cvproject.urls'))
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + \
          static(settings.STATIC_URL,     document_root=settings.STATIC_ROOT)

我正在按照 Django 网站上的示例开发 Web 应用程序。

当我在模板中加载静态文件时,它只能在各个目录中找到文件。以及如何加载全局静态文件?

谢谢

【问题讨论】:

  • 您的设置中 TEMPLATE_LOADERS 的值是多少?
  • 只是公平的警告,这不建议用于生产服务器...最好使用您的 Web 层(apache/nginx/etc)将/static 重定向到您的静态文件目录

标签: python django


【解决方案1】:

静态文件会自动在多个位置查找静态文件。这与“发现者”(STATICFILES_FINDERS)有关。

  1. AppDirectoriesFinder : 寻找你的应用的“/static/”目录
  2. STATICFILES_DIRS : FileSystemFinder 的查找器

您可以在静态文件中使用这些工具,我认为您可以使用STATICFILES_DIRS 做您想做的事情。你可以找到STATICFILES_DIRS examples

【讨论】:

  • 谢谢,新建一个文件夹,收藏到static_root作品中
【解决方案2】:

确保您的 STATICFILES_FINDERS in settings.py 中包含 FileSystemFinder

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder'
)

然后定义一个额外的目录以在STATICFILES_DIRS 中包含额外的静态文件,例如:

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

【讨论】:

  • staticfiles_dirs 与静态根目录相同,并返回“配置不当:STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置”
  • 换一个文件夹,两者应该不一样*.com/questions/12161271/…