一、建立Django工程html
django-admin startproject 工程名
二、建立Apppython
cd 工程名 python manage.py startapp cmdb
三、静态文件配置django
编辑 project.settings.py,追加如下内容bash
STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), )
四、模板路径配置app
DIRS ==> (os.path.join(BASE_DIR, 'templates'),)
五、settings中,注释 csrfide
MIDDLEWARE_CLASSES = ( #'django.middleware.csrf.CsrfViewMiddleware', )
六、定义路由规则,在url.py中定义用户访问的url由哪一个函数来处理请求函数
url.py "login" --> 函数名
七、定义视图函数,在views.py中定义函数url
def func(reuest): # request.method GET/POST # http://127.0.0.1:8000/home?nid=123&name=bob # request.GET.get('',None) #获取请求发来的数据 # request.POST.get('',None) # return HttpResponse("字符串") # return Render(request, 'HTML模板路径',{"user_list": USER_LIST}) # return redirect('只能填URL,例如:/home')
八、模板渲染spa
Django特殊的模板语言,例如:
.net
--变量名取值--
在views.py中定义好变量和对应的值,在template的html页面中经过` var_name `的方式来取值
def func(request): return render(request,"index.html",{'current_user': "bob"}) index.html <html> <body> <div>{{ current_user }}</div> </body> </html>
--For循环取值--
在views.py中定义好列表和值,在template的html页面中经过{{ for循环 }}的方式来取值
def func(request): return render(request,"index.html",{ 'current_user': "bob", 'user_list':['bob','aaa','bbb']}) index.html <html> <body> <div>{{ current_user }}</div> <ul> {% for row in user_list %} <li>{{ row }}</li> <% endfor %> </ul> </body> </html>
--索引取值--
在views.py中定义好字典和值,在template的html页面中经过` var_name`.`key `的方式来取值
def func(request): return render(request,"index.html",{ 'current_user': "bob", 'user_list': ['bob','aaa','bbb'], 'user_dict': ['k1': 'v1', 'k2': 'v2'] }) index.html <html> <body> <div>{{ current_user }}</div> <a>{{ user_list.1 }}</a> //对于列表直接用索引取值 <a>{{ user_dict.k1 }}</a> //对于字典,要用key取值 <a>{{ user_dict.k2 }}</a> </body> </html>
--循环字典--
模板语法除了而已循环列表外,也能够循环字典,用法和python基本同样,只不过循环时,不要加括号()
USER_DICT = { 'K1': 'V1', 'K2': 'V2', 'K3': 'V3', 'K4': 'V4' } 例一、循环key {% for k in USER_DICT.keys %} <li>{{ k }}</li> {% endfor %} 例二、循环键值对 {% for item in USER_DICT.items %} <li>{{ item }}</li> {% endfor %} 例三、循环values {% for v in USER_DICT.values %} <li>{{ v }}</li> {% endfor %} 例四、循环values {% for k,v in USER_DICT.items %} <li>{{ k }}-{{ v }}</li> {% endfor %}
--条件取值--
{% if %}
{% if %}
{% endif %}
{% else%}
{% else %}
{% endif %}
def func(request): return render(request,"index.html",{ 'current_user': "bob", 'age': 18, 'user_list': ['bob','aaa','bbb'], 'user_dict': ['k1': 'v1', 'k2': 'v2'] }) index.html <html> <body> <div>{{ current_user }}</div> <a>{{ user_list.1 }}</a> //对于列表直接用索引取值 <a>{{ user_dict.k1 }}</a> //对于字典,要用key取值 <a>{{ user_dict.k2 }}</a> {% if age %} <a>有年龄</a> {% if age > 16 %} <a>老男人</a> {% else %} <a>小鲜肉</a> {% endif %} {% else %} <a>无年龄</a> {% endif %} </body> </html>
模板的工做流程:
一、当用户请求经过url发送请求后,django路由将请求交给视图函数,
二、而后视图函数会先去取模板,
三、将模板中有` current_user `这样的变量与视图中定义的值进行渲染,渲染后将模板内容转换成字符串
四、将生成后字符串总体返回给用户
过滤器
模板过滤器是变量显示前转换它们的值的方式,看起来像下面这样
{{ name|lower }}
这将显示经过lower过滤器过滤后` name `变量的值,它将文本转换成小写
使用(|)管道来申请一个过滤器
过滤器能够串成链,即一个过滤器的结果能够传向下一个,下面是escape文本内容而后把换行转换成p标签的习惯用法
{{ my_text|escape|linebreaks }}
更过关于Django模板的资料,请访问: