2012-10-24 27 views
2

我是新来的Django。我阅读了文档,并且我完全与媒体根文件和静态根文件相混淆,我应该将我的CSS文件与我的JavaScript文件一起放置。如何在Django项目/应用程序中组织和加载CSS?

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

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

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

回答

5

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

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

  • 添加django.contrib.staticfilesINSTALLED_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前缀。这是一个网址组件必须以斜杠结尾。例如/static/

  • STATIC_ROOT这是系统上目录的路径。准备部署时,运行collectstatic命令,django将查找所有静态文件并将其转储到STATIC_ROOT指向的目录中。然后你可以把这个目录放到你的web服务器配置的DOCUMENT_ROOT文件夹中。然后,将/static/ URL指向此文件夹。实施例是STATIC_ROOT = /home/user/project/www/

如果Apache被配置的/var/www/一个DOCUMENT_ROOT,你的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*的文件。
0

我建议你保留所有的JS和CSS文件命名,你的应用程序文件夹之外的“静态”一些地方的文件夹中(这是Django是如何建议的话) 例如,如果你把它在/ var/WWW /静态/ 因此,在这种情况下,这是您的属性看起来如何: STATIC_DIR =“/ var/www/static /” STATIC_URL =“/ static /”(可以是任何东西) STATICFILES_FINDERS =('django。 contrib.staticfiles.finders.FileSystemFinder',)

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

1

媒体服务是Django是一件“事情”。

您可以在这里看到的链接文档: https://docs.djangoproject.com/en/dev/howto/static-files/

但魔术位如下** IF这生产不**,你可能需要将以下添加到您的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的网站。