1、静态路径设置(访问本地的js/css文件)
如果不设置的话,<script src="path">中的path会自动变为url请求,即http://host/path,这样的话本地文件就访问不到了
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static') ,
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
这样之后在程序中,就可以i这么写了<script src="{{STATIC_URL}}path">
2、url配置
(a)基本结构:
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url("匹配url的正则表达式",include("其他包含urlpatterns的py文件")),
..................
)
正则表达式的匹配成功应该分为两种情况,一种是待匹配的字符串是否完全符合某种模式,另一种是待匹配的字符串是否包含符合当前模式的子字符串,比如模式串a.*b,"axxxxxxxxxxb"可以与它完全匹配(第一种情况),当然也包含符合该模式的子串,而"xxaxxxbxxx"就不符合第一种情况了,但在第二情况下也算是匹配成功。此处的url匹配以第二种为标准,假如你写的url的正则表达式是空字符串“”,那么任何发送过来请求的url都会匹配成功,这样就没什么意义了。
为了精确匹配,可以借助符号^,$,如果我们用尾部不是$的模式’^hello/’,那么任何以/hello/开头的URL将会匹配,例如:/hello/foo 和/hello/bar,而不仅仅是/hello/。类似地,如果我们忽略了尖号(^),即’hello/$’,那么任何以hello/结尾的URL将会匹配,例如:/foo/bar/hello/。如果我们简单使用hello/,即没有^开头和$结尾,那么任何包含hello/的URL将会匹配,如:/foo/hello/bar,在含有include的url配置中不要加$。
(b)解析过程:
从第一个斜杠后的第一个字母开始匹配,第一个斜杠在url解析时会被忽略,除此之外的每一个斜杠都会参与解析,包括最后一个,如下例:
urls.py:url(r'^home/',include('MyApp')
从客户端发送过来的url请求,如http://127.0.0.1:8000/home/index,其解析过程为:首先忽略掉http://127.0.0.1:8000/,解析home/index,home/被urls.py截取,剩下的index扔给MyApp下的_ _init_ _.py去解析
3、json数据的传递与解析
(a)解析来自客户端的json
_dict=request.REQUEST
data=json.loads(_dict['key'],'utf-8')
这样能获取的前提是,js中传递过来的json数据经过JSON.stringify的处理
(b)返回本地数据到客户端
rst=json.dumps(ret)
if type(rst) in [types.TupleType,types.ListType]:
content_type,body=rst
return HttpResponse(body,content_type)
return HttpResponse(rst)
注:客户端无须做额外解析,可直接访问,如数组,字典等,都可以直接当作数组、字典看
4、ajax中的url
若不以斜杠开始,URL为将当前路径中最后的斜杠后的内容替换为当前url,若最后斜杠后没有其他内容,则直接连接
若有斜杠,则url为域名+当前url的形式
5、如何通过模板变量访问setting.py中的预定义的变量
如果不想特别指明的话,直接在render_to_response中传递locals即可,否则就认为构造字典进行传递,如要在模板中访问settings.py中的STATIC_URL,代码如下:
from DjangoDemo.settings import STATIC_URL
def index(request):
_dict={}
_dict['STATIC_URL']=STATIC_URL
return render_to_response('index.html',_dict,context_instance=RequestContext(request))
locals是否应该使用呢?请参考:http://stackoverflow.com/questions/1901525/django-template-and-the-locals-trick