如何在Django 1.0中使用静态文件地址

zhuan


如何在Django 1.0中使用静态文件地址

2008-09-04 14:48 by Jaypei, 923 visits, 收藏, 编辑

 

Django本身是不支持静态文件的,网上找了些资料,用Django自带的static.py解决了问题。

 

 

How to do it

在URLconf中如下代码:

(r ' ^site_media/(?P<path>.*)$ ' ' django.views.static.serve ' , { ' document_root ' ' /path/to/media ' }),

 

site_media是URL根地址,/path/to/media是网站文件目录根地址。

比如:

 

  • 文件 /path/to/media/foo.jpg 在URL /site_media/foo.jpg 可用.
  • 文件 /path/to/media/css/mystyles.css 在URL /site_media/css/mystyles.css 可用.
  • 文件 /path/bar.jpg 访问不到, 因为它不在规则范围内.

 

 

目录列表

设置serve的show_indexes参数可以在访问指定URL根地址的时候显示文件列表。

(r ' ^site_media/(?P<path>.*)$ ' ' django.views.static.serve ' , { ' document_root ' ' /path/to/media ' ' show_indexes ' : True}),

 

 

可以定义static/directory_index自定义显示文件列表的样式,参数如下:

directory-目录名称, file_list-文件列表

也可以复制static.py文件到项目文件中做显示功能上的定制(如文件大小等)。

 

例子1:添加 static/directory_index文件

复制代码
# ......

DEFAULT_DIRECTORY_INDEX_TEMPLATE 
=   """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Language" content="en-us" />
    <meta name="robots" content="NONE,NOARCHIVE" />
    <title>Index of {{ directory|escape }}</title>
  </head>
  <body>
    <h1>Index of {{ directory|escape }}</h1>
    <ul>
      {% for f,f_size in file_list.items %}
      <li><a href="{{ f|urlencode }}">{{ f|escape }}</a> <span style="color:green">{{ f_size }} bytes</span></li>
      {% endfor %}
    </ul>
  </body>
</html>
"""

def  directory_index(path, fullpath):
    
try :
        t 
=  loader.get_template( ' static/directory_index ' )
    
except  TemplateDoesNotExist:
        t 
=  Template(DEFAULT_DIRECTORY_INDEX_TEMPLATE, name = ' Default directory index template ' )
    files 
=  {}
    
for  f  in  os.listdir(fullpath):
        
if   not  f.startswith( ' . ' ):
            f_size 
=  0
            full_name 
=  os.path.join(fullpath, f)
            
if  os.path.isdir(full_name):
                f 
+=   ' / '
            
else :
                f_size 
=  os.stat(full_name)[ 6 ]
            files[f] 
=  f_size
    c 
=  Context({
        
' directory '  : path  +   ' / ' ,
        
' file_list '  : files,
    })
    
return  HttpResponse(t.render(c))

# ......
复制代码

 

 

 

 

使用例二的时候不要直接修改django/view/static.py,最好复制到项目中做修改然后在urls.py中使用项目中的static.py

 

仅当DEBUG=True的时候使用

可是仅在DEBUG=True的时候开启目录浏览功能:

 

复制代码
#  import 项目setting

if  settings.DEBUG:
    urlpatterns 
+=  patterns( '' ,
        (r
' ^site_media/(?P<path>.*)$ ' ' django.views.static.serve ' , { ' document_root ' ' /path/to/media ' }),
    )
复制代码

 

 

 

 

转载自:

http://www.cnblogs.com/Jaypei/archive/2008/09/04/1284012.html

参考资料:

http://www.djangoproject.com/documentation/static_files/



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值