如何在Django项目/应用程序中组织和加载CSS?

时间:2012-10-24 01:45:17

标签: django django-templates django-views

我是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"/>

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

3 个答案:

答案 0 :(得分:6)

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

  • 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添加到顶部,并在定义完所有网址后,在文件末尾,添加urlpatterns += staticfiles_urlpatterns()

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


STATIC_URLSTATIC_ROOT在部署时派上用场。

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

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

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


  • STATICFILES_FINDERS。此设置列出了当您运行collectstatic时django可用于搜索静态文件的方法,而您通常根本不会对此进行修改。

  • MEDIA_ROOTMEDIA_URL。这些设置控制文件系统位置,以及使用django 上传的任何文件的URL前缀;这些 不能与STATICFILES_DIRS 相同。您需要手动处理此问题,因为collectstatic不会触及这些位置。如果您正在开发中测试文件上传,则可以使用django.views.static.serve()来提供MEDIA*中的文件。

答案 1 :(得分: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站点。

答案 2 :(得分:0)

我建议你将所有的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。