django如何映射css,js等文件1

前言

我的版本是django1.8,对于这个问题的解决网上有很多方法,但我看了十多篇博客,把他们的解决方案都试了,然而都没有成功,四个多小时心态崩了n次。。。好在最后偶然解决了(Why?),这是我的解决方案,另外我再讲一下我踩过的坑,大家顺便不要踩了,或者试着踩一下(也许版本不同反而是一种解决办法)

具体情况:

目录结构(一定要用最简单的结构测试):
mysite\
++mysite\
++++urls.py
++++settings.py
++static\
++++mystyle.css
++templates\
++++index.html

解决方案:

一、代码:
settings.py新增部分:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

urls.py 中 urlpatterns数组 新增部分:

from django.views.static import serve
url(r'staticfiles(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}),

index.html 部分:

<link rel="stylesheet" type="text/css" href="/static/mystyle.css"> 

二、说明:
注意到BASE_DIR含义(我用pycharm生成django项目,它会自动给你添加的),

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))).replace('\\', '/')

三、分析:
我不是计算机专业的,措辞不专业多多谅解。
区分哪些变量是自己定义的,哪些变量时django定义的非常重要。
首先,settings.py中对于STATIC_URL的定义是生成project时自带的,应该是django自身需要调用的吧,所以STATIC_URL是django定义的(有一种解释是:“把/static/打头的请求转移到静态文件目录里面”)我不知道它是什么意思,就不准备动它了。
其次,STATIC_ROOT这是是我自己定义的变量,这里面存储的是本地地址(假设对应E:/mysite/static),用于和服务器地址对应。
映射关系存储在urls.py中,r’staticfiles(?P.*)$’ 具体含义不解释了,意思大体是staticfiles后面的东西是我们关心的。假设输入http://127.0.0.1:8000/staticfiles/mystyle.css,就提取有用信息mystyles.css, 好。然后{‘document_root’: settings.STATIC_ROOT}),这是个字典,我们关心STATIC_ROOT(刚解释了假设对应E:/mysite/static),那么我们找的本地地址就出来了(E:/mysite/static/mystyle.css),很好。
现在我们就把http://127.0.0.1:8000/staticfiles/mystyle.css服务器地址)和E:/mysite/static/mystyle.css(本地地址)对应起来了。有点啰嗦,看懂就好。

坑一:

url( r'^static/(?P<path>.*)$', 'django.views.static.serve',{ 'document_root': settings.STATIC_URL }), 

报错:

view must be a callable or a list.tuple in the case of include()

解决方案:

from django.views.static import serve
url( r'^static/(?P<path>.*)$', serve,{ 'document_root': settings.STATIC_URL }),

原因分析:
有一种说法:django 1.10之后不在支持URL用字符串表示了

总结:

仔细想想这次为什么这么挫折?
一、我没有把目录结构最简化就进行测试了
我的目录结构:
mysite\
++mysite\
++++urls.py
++++settings.py
++myapp\
++++urls.py
++++static\
++++++mystyle.cs
++++templates\
++++index.html
++static\
++++mystyle.css
++templates\
++++index.html
相对复杂的环境测试需要考虑的因素多,而且不容易分析。
二、重名问题
所有名称都是static,包括服务器地址、本地地址等等我在测试过程中都使用了一个名字,混淆很严重,不容易分析。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值