【问题标题】:Once and for all, static files vs Django 1.3一劳永逸,静态文件与 Django 1.3
【发布时间】:2012-04-09 23:28:06
【问题描述】:

我一直在努力关注每一个教程和线程,我只是无法把它放在一起。

对不起,请像我三岁一样向我解释......

我有什么: 我想使用的 CSS 样式模板。

如何到达: MD:项目/应用程序/静态/

将 style.css 放在那里

settings.py:

STATIC_ROOT = '/project/app/static/'

STATIC_URL = '/static/'

(当我尝试在模板中打印 {{ STATIC_URL }} 时,这是否应该至少给我字符串'/static/'..?)

template:
<LINK REL=StyleSheet HREF="{{ STATIC_URL }}/style.css" TYPE="text/css" MEDIA=screen>

在我看来,下一个合乎逻辑的事情是也创建一个 /static/-url?

我真的迷路了..

【问题讨论】:

  • 您需要安装适当的静态文件上下文处理器。
  • 不要遵循所有的教程,你只需要在 django 网站上找到的唯一的 django 文档。仅遵循该教程,对于 1.3,其他人让您感到困惑。
  • 已安装的应用程序:'django.contrib.staticfiles',我还需要什么吗?

标签: python templates static django-1.3


【解决方案1】:

Django 的静态文件系统主要有两点:

  1. 将多个(特定于应用程序的)目录中的静态文件组合到一个可以提供服务的位置

  2. 通过 HTTP 提供这些文件

如果您有许多位于不同目录中的静态文件,则您想要#1。如果您想在使用开发服务器时查看这些文件,则需要 #2。在生产环境中,您通常会跳过 #2,因为 #1 的目的是将文件放在您的 Web 服务器可以访问它们的位置。

组织和收集静态文件

话虽如此,这就是你获得 #1 的方法:

settings.py:

# This is a filesystem path
STATIC_ROOT = '/path/to/my/project/collected-static-files/'

# This is a URL prefix
STATIC_URL = '/static/'

INSTALLED_APPS = (
    ...
    'django.contrib.staticfiles',
    ...
)
TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.core.context_processors.static',
    ...
)

此时,您可以做几件事:

  1. 您将静态文件放在每个应用程序下的“/static/”目录中。那就是 django 会寻找它们的地方。如果您的应用程序之外有静态文件,则可以使用另一个设置 STATIC_DIRS

  2. 您可以运行 manage.py collectstatic 让 Django 遍历您的所有应用程序,找到所有静态文件,并将它们复制到 /path/to/my/project/collected-static-files 中(这就是该设置是文件系统路径的原因。)

  3. 您可以在模板中使用{{ STATIC_URL }} 来访问文件。

通过 HTTP 提供静态文件

在开发模式下,在开发服务器下,Django 会自动提供STATIC_ROOT 目录之外的文件。

基本上,Django 会为表单的 URL 添加一个 URL 处理程序

/static/some-dir/some-file-name

并从您的硬盘驱动器,从文件系统路径提供内容

/path/to/my/project/collected-static-files/some-dir/some-file-name

在生产中,这不会自动发生,因此您必须配置您的网络服务器来执行相同的操作。 (通过 Django 的完整处理管道运行所有静态文件并不是一个好主意。Web 服务器可以更有效地执行此操作)

【讨论】:

  • 我仍然无法从 {{ STATIC_URL }} 中获取任何内容,STATIC_ROOT 应该指向我驱动器上的现有文件夹,对吧?所以 'C:/blablbalba/static_stuff' 应该没问题?
  • 我已经使用 manage.py collectstatic 将所有静态文件组合在一起,所以至少它们在它们应该在的位置..
  • 您是否在 settings.py 中将 'django.core.context_processors.static' 添加到您的 TEMPLATE_CONTEXT_PROCESSORS 中?
  • 问题是,我最初什至没有 TEMPLATE_CONTEXT_PROCESSORS,但是是的。 (添加后..)
  • 我终于让它工作了。虽然不是正确的方法,但可以使用 MEDIA_ROOT 代替。至少对于这个任务来说,这是必须要做的。感谢您的努力。
猜你喜欢
  • 2016-07-20
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多