一劳永逸,静态文件与Django 1.3

时间:2012-03-26 12:54:08

标签: python templates static django-1.3

我一直在尝试按照每一个教程和线程进行操作,但是我无法理解这一点。

很抱歉,但请把它作为我三岁的时间向我展示..

我有什么: 我想使用的CSS,为模板设计样式。

如何到达那里:  MD:project / app / static /

将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?

我真的迷失在这里......

1 个答案:

答案 0 :(得分:2)

Django的静态文件系统大约有两件事:

  1. 将来自多个(特定于应用)目录的静态文件合并到一个可以从中提供服务的地方

  2. 通过HTTP提供这些文件

  3. 如果您有多个位于不同目录中的静态文件,则需要#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 }}来访问文件。

    4. 通过HTTP提供静态文件

      在开发模式下,在dev服务器下,Django将自动从STATIC_ROOT目录中提供文件。

      基本上,Django将为表单

      的URL添加URL处理程序
      /static/some-dir/some-file-name
      

      从文件系统路径

      提供硬盘中的内容
      /path/to/my/project/collected-static-files/some-dir/some-file-name
      

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