首页 文章

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

提问于
浏览
2

我是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 回答

  • 1

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

    • Django将在 INSTALLED_APPS 中的任何应用程序内搜索名为 static/ 的目录,以获取静态文件 . 如果您的文件与任何应用程序无关,则可以将它们放在单独的目录中 . 这个目录应该添加到 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 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 . 这些设置控制文件系统位置,以及 uploaded using django 的任何文件的URL前缀;这些 cannot be the same as STATICFILES_DIRS . 您需要手动处理此操作,因为 collectstatic 不会触及这些位置 . 如果您正在开发中测试文件上载,则可以使用django.views.static.serve()来提供 MEDIA* 中的文件 .
  • 6

    媒体服务是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,
            }),
       )
    

    对于 生产环境 服务器,您通过Web服务器(apache或其他)提供媒体旧学校风格,使用相同的域但有效地完全独立于您的Django / Python站点 .

  • 0

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

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

相关问题