python - 处理与 Django 中的应用程序无关的静态文件

标签 python django

在文档中https://docs.djangoproject.com/en/dev/howto/static-files/

我读到静态文件应该放在各自的应用程序中并用

调用
{% load staticfiles %}
<img src="{% static "articles/css/base.css" %}" alt="My image"/>

但是稍后在文档中提到某些静态文件不属于特定应用程序。这是STATICFILES_DIRS的地方发挥作用。如果我没看错 STATICFILES_DIRS是 Django 用来查找其他静态文件的元组。我想知道如何调用从 STATICFILES_DIRS 调用的静态文件?

例如:类似

<link rel="stylesheet" type="text/css" href="{% static "/css/default.css" %}">

此外,我不确定要为我的 STATIC_ROOT 放些什么.我要把它留空吗? ( '' )

我的项目树

mysite
  \articles
       \static
       \articles
           \css
               base.css
  \static
       \images
       \css
           default.css
       \js 
  \templates
       base.html
  \settings.py 

目前在我的 settings.py 中关于静态文件

# looks for static files in each app
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

STATICFILES_STORAGE = (
    'django.contrib.staticfiles.storage.StaticFilesStorage'
)

# the absolute path to the directory where collectstatic will collect static files for deployment (OUTPUT)
STATIC_ROOT = ''

# This setting defines the additional locations the static files app will traverse if the FileSystemFinder finder is enabled.
STATICFILES_DIRS = (
    # used for static assets that aren't tied to a particular app
     os.path.join(BASE_DIR, 'static'),
)

# URL to use when referring to static files located in STATIC_ROOT
STATIC_URL = '/static/'

最佳答案

几乎所有关于 django static 的东西都与 django.contrib.staticfiles 应用有关。尽管您需要自定义编辑许多设置才能使 staticfiles 正常工作,但实际操作很简单。它提供了一个 collectstatic 命令,可以从不同的应用程序收集静态文件并将它们放入一个目录中。

第一个问题的答案很简单:将那些常见的静态文件放在 django 项目目录的 /static 目录下。在您的例子中,它是 mysite/static

理由:一是官方方式。您可以在官方文档中找到以下代码:Managing static files (CSS, images) .第二,合理。由于我们将仅在单个应用程序中使用的静态文件放在 project/appnane/static/... 项目的静态目录应遵循相同的名称模式。

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"), # That's it!!
    '/var/www/static/',
)

正如我在评论中所说,您不应将 STATIC_ROOT 设置为 project_absolutr_path/static。因为该目录是放置css app静态文件的用户。您不希望 collectstatics 命令污染该目录,尤其是当您使用 git/svn 等版本控制系统时。

STATIC_ROOT 实际上取决于您托管这些静态文件的方式(Apache、Nginx、S3、CDN、Paas,如 heroku)

关于python - 处理与 Django 中的应用程序无关的静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22976596/

相关文章:

python - 重新格式化文本数据从整数转换为时间并使用 sed awk split 与日期连接

python - 为什么 scapy 在 Mac 上安装失败?

python - Django 模板扩展和 CSS

django - 找不到 msguniq。 Django 1.8,Windows 7 64 位

django - 带有 Django 应用程序的 Apache 服务器上的 403 错误

php - 从 Python 到 PHP 丢失 JSON 值?

python - # -*- 编码 : utf-8 -*- on python3

python - Python 字典是否保证排序键?

django - 如何在模态窗口中显示 django 表单?

javascript - Django / Ajax : javascript object formatting