如何在 Django 项目/应用程序中组织和加载 CSS?
Posted
技术标签:
【中文标题】如何在 Django 项目/应用程序中组织和加载 CSS?【英文标题】:How to organize and load CSS within Django project/app? 【发布时间】:2012-10-14 01:24:59 【问题描述】:我是 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"/>
那么管理我的静态文件的最佳、最有效/正确的方法是什么? 谢谢大家的帮助。感谢您的时间和精力。
【问题讨论】:
【参考方案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_URL
和 STATIC_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
。此设置列出了 django 在运行 collectstatic
时可以用来搜索静态文件的方法,您通常根本不需要修改它。
MEDIA_ROOT
,MEDIA_URL
。这些设置控制文件系统位置,以及使用 django 上传的任何文件的 URL 前缀;这些不能与STATICFILES_DIRS
相同。您需要手动处理此问题,因为collectstatic
不会触及这些位置。如果您在开发中测试文件上传,可以使用django.views.static.serve()
提供来自MEDIA*
的文件。
【讨论】:
【参考方案2】:我建议您将所有 js 和 css 文件保存在一个名为“静态”的文件夹中,该文件夹位于应用程序文件夹之外的某个位置(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。
【讨论】:
【参考方案3】:媒体服务是 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 站点。
【讨论】:
以上是关于如何在 Django 项目/应用程序中组织和加载 CSS?的主要内容,如果未能解决你的问题,请参考以下文章