Django显示图片

通常在App的根目录下建两个目录
static用来放网站自己的图片、js、css等
media用来放用户上传的图片、文件等
现在假设有d:/wwwsite/office/static/images/psb.jpg


在urls.py中的urlpatterns中添加:
urlpatterns = patterns('',
    url(r'^static/(?P<path>.*)', 'django.views.static.serve', {'document_root': 'd:/wwwsite/office/static'}),
)


在office.html中加入
<img src="/static/images/psb.jpg">即可。
django在解析到地址为http://localhost/static/images/psb.jpg时会将其解析为d:/wwwsite/office/static/images/psb.jpg


但在Windows下测试网站时可能会有UnicodeDecodeError,可能与某些国产软件对注册表的改写gbk编码导致python无法进行第三方库的安装操作。
打开C:\Python27\Lib下的 mimetypes.py 文件,找到大概256行(你可以用Notepad++的搜索功能)的
‘default_encoding = sys.getdefaultencoding()’。
在这行前面添加三行,结果为:
if sys.getdefaultencoding() != 'gbk':  
    reload(sys)  
sys.setdefaultencoding('gbk')
default_encoding = sys.getdefaultencoding()


但这种处理方法每个App都要加入urlpattern,而且静态需要经过django的处理,速度太慢。


可参照 http://hgoldfish.com/blogs/article/77/的方法。


新的Django提供了一个方法自动地将所有的静态文件放在一起。只要在写App的时候创建一个static子目录专门保存静态文件就行了。在开发阶段,不必费心去做映射,不需要配置urls.py。


在布署到生产环境的时候,只需要配置Apache把/static/映射到STATIC_ROOT。然后运行manage.py collectstatic,自动地STATICFILES_DIRS列出的目录以及各个App下的static子目录的所有


文件复制到STATIC_ROOT。因为复制过程可能会覆盖掉原来的文件,所以,一定不能把我们辛苦做出来静态文件放这边!


在开发阶段,Django把/static映射到django.contrib.staticfiles这个App。staticfiles自动地从STATICFILES_DIRS、STATIC_ROOT以及各个App的static子目录里面搜索静态文件。一旦布署


到开发环境上,settings.py不需要重新编写,只要在Apache的配置文件里面写好映射,/static将会被Apache处理。django.contrib.staticfiles虽然仍然存在,但因为不会接收到


以/static/开始的路径,所以将不会产生作用。不必担心Django会使用处理速度变慢。另外,当settings.DEBUG is False的时候,staticfiles将自动关闭。


这样不需要在urls.py中的urlpatterns中添加,只要在img处加入
#直接使用
{% load staticfiles %}
<p><img src="{% static "images/psb.jpg" %}"></p>
#变量方式使用  
{% load staticfiles %}  
<link rel="stylesheet" href="{% static user_stylesheet %}" type="text/css" media="screen"/>
变量使用需要增加view
from django.shortcuts import render_to_response
def index(request):  
    return render_to_response('index.html', {'user_stylesheet': 'css/user.css'})


同时在setting.py中加入
STATIC_URL = '/static/'
STATICFILES_DIRS = (
     os.path.join(BASE_DIR, 'static').replace('\\', '/'),
)


(MEDIA的设置为
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')
MEDIA_URL = '/media/'

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值