4

我是 Django 的新手。我阅读了文档,我对媒体根文件和静态根文件以及我应该将我的 css 文件和我的 javascript 文件放在哪里感到困惑。

你们能指出我正确的方向吗?项目设置:

Project
     -myapp
         -model,view,and test
     -template
         - base.html
         - index.html
         - view1
         - view2
         - media
             - css
                 - style.css
                 - ie.css
             - js
             - img

     -setting.py
     -url.py

我的 static_url、static_root、media_url、media_root、STATICFILES_DIRS 和 STATICFILES_FINDERS 应该是什么样子?

我目前如何加载我的 css 文件是通过 base.html 使用以下内容:

{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static user_stylesheet %}"type="text/css" media="screen"/>

那么管理我的静态文件的最佳和最有效/正确的方法是什么?谢谢大家的帮助。我感谢您的时间和精力。

4

3 回答 3

7

静态文件是一个简单的过程:

  • Django 将搜索static/在任何应用程序中命名INSTALLED_APPS为静态文件的目录。如果您有未绑定到任何应用程序的文件,您可以将它们放在单独的目录中。这个目录应该被添加到STATICFILES_DIRS(一个元组)以便 django 知道它。在你的情况下,你应该有STATICFILES_DIRS = ('/home/user/Project/template/media',)

  • 添加django.contrib.staticfiles到您的INSTALLED_APPS

现在,如果您正在使用 进行测试runserver,请打开urls.py并添加from django.contrib.staticfiles.urls import staticfiles_urlpatterns到顶部,在定义完所有 URL 之后,在文件末尾添加urlpatterns += staticfiles_urlpatterns()

您已经有了访问问题中静态文件的正确方法。另一种方法是使用{{ STATIC_URL }},并确保您发送回复时使用RequestContext. 如果您使用基于类的视图,则无需更改任何内容。对于您的其他普通视图方法,只需使用render快捷方式.


STATIC_URLSTATIC_ROOT在您部署时派上用场。

  • STATIC_URL是您的 Web 服务器已配置的 URL 前缀,用于指向系统中包含您的静态文件的位置。这是一个url 组件必须以斜杠结尾。例如/static/

  • STATIC_ROOT这是系统上目录的路径。当你准备好部署时,运行collectstatic命令,django 会找到你所有的静态文件并将它们转储到STATIC_ROOT. 然后您可以获取此目录,将其放在您DOCUMENT_ROOT的 Web 服务器配置的文件夹中。然后,将/static/URL 指向此文件夹。例子是STATIC_ROOT = /home/user/project/www/

如果 Apache 配置了DOCUMENT_ROOTof /var/www/,并且您的STATIC_URL设置是/static/; 运行后collectstatic,将文件夹中的内容移动/home/user/project/www//var/www/static/.


  • STATICFILES_FINDERS. 这个设置列出了 django 在你运行时可以用来搜索你的静态文件的方法,collectstatic你通常根本不修改它。

  • MEDIA_ROOT, MEDIA_URL. 这些设置控制文件系统位置,以及使用 django 上传的任何文件的 URL 前缀;这些不能与 相同STATICFILES_DIRS。您需要手动处理,因为collectstatic不会触及这些位置。如果您在开发中测试文件上传,您可以使用django.views.static.serve()MEDIA*.
于 2012-10-24T05:09:18.697 回答
1

我建议您将所有 js 和 css 文件保存在应用程序文件夹之外的某个名为“static”的文件夹中(这就是 django 推荐的方式)例如,如果您将其保存在 /var/www/static/ 下,那么,在这种情况下,这就是您的属性的样子: STATIC_DIR = "/var/www/static/" STATIC_URL = "/static/" (可以是任何东西) STATICFILES_FINDERS = ('django.contrib.staticfiles.finders.FileSystemFinder', )

在模板中,您可以使用模板标签 {{STATIC_URL}} 引用静态文件夹,并将路径的其余部分附加到静态文件夹中的文件。注意,要使用 {{STATIC_URL}} 模板标签,您需要从视图代码中传递 context_instance。

于 2012-10-24T04:46:31.767 回答
1

媒体服务是 Django 是一个“东西”。

您可以在此处查看文档的链接: https ://docs.djangoproject.com/en/dev/howto/static-files/

但神奇的一点如下**如果这不是生产中**您可能需要将以下内容添加到您的底部urls.py

from django.conf import settings

# ... the rest of your URLconf goes here ...

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.MEDIA_ROOT,
        }),
   )

对于生产服务器,您通过您的网络服务器(apache 或其他)提供媒体老派风格,使用相同的域但实际上完全独立于您的 Django/Python 站点。

于 2012-10-24T04:47:35.210 回答