码迷,mamicode.com
首页 > Web开发 > 详细

django url分发,视图,模板回顾

时间:2019-01-22 19:09:47      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:display   ret   content   get   size   div   hive   library   浏览器   

Django基础轮廓
  MTV+controller

 

一 url分发系统:
  1 简单使用

url(r^articles/2003/$, views.special_case_2003),  # special_case_2003(request)
url(r‘^articles/(\d{4})/$‘, views.year_archive),  # year_archive(request,1999)
url(r^articles/(\d{4})/(\d+)$, views.month_archive),  # month_archive(request,1999,12)

 

  2 有名分组

url(r^articles/(?P<y>\d{4})/(?P<m>\d+)$, views.month_archive2), 
# month_archive(request,y=1999,m=12)

 

  3 分发include

url(app/, include(app.urls)),


  4 反向解析

(1)在模板:     {% url 别名 %}
(2)在py文件中:   _url=reverse("index")

 

二、视图函数

  浏览器  ----------  服务器
              ‘‘‘
               请求首行
               请求头
               空格
               请求体(post) # user=yuan&pwd=123

              ‘‘‘              

  1、请求对象request

 # request;请求信息对象
        print(request.method)
        print(request.path)
        print(request.GET)  
        print(request.POST) # {"user":"yuan","pwd":123}
        print(request.body) # 请求体原生数据   " user=yuan&pwd=123"
        print(request.META)
        print(request.get_full_path()) #路径+请求数据
         print(request.is_ajax())

  

  2、响应对象    

1 Httpresponse("OK")
2 render(request,"index.html")  
     (1) 找文件,读文件
     (2) 渲染文件:将模板文件中的所有{{}},{%%}替换成标签 
3 重定向 redirect
    (1)浏览器发送一个post请求;
    (2)请求通过了,服务器发送一个301或者302状态码和location:新路径给浏览器;
    (3)接收到301或者302状态码,解读响应体中的location的值,携带此路径再一次访问服务器;
    (4)服务器再一次接受到路径,将路径对应的数据打包好,传送给浏览器渲染。

 

三、模板语法

  1 渲染变量  {{val}}

(1) 深度查询 {{val.}}
(2) 过滤器  {{val|filter_name:参数}}
               {{now|date:"Y-m-d"}}
                     
      常用过滤器: add  date default lenth slice  safe filesizeformat   

  2 渲染标签  {%%} 

{%for i in val%}
{%endfor%}       
                   
{%if %}
{%endif%}
                  
{%csrftoken%}        

  3、自定义标签和过滤器

1、在settings中的INSTALLED_APPS配置当前app;
2、在app中创建templatetags模块;
3、创建任意 .py 文件,如:my_tags.py;
4、编写代码
技术分享图片
from django import template
from django.utils.safestring import mark_safe
 
register = template.Library()   #register的名字是固定的,不可改变
 
 
@register.filter
def filter_multi(v1,v2):
    return  v1 * v2


@register.simple_tag
def simple_tag_multi(v1,v2):
    return  v1 * v2
乘法标签和过滤器

 5、使用的时候导入自定义模板和标签文件

  {% load 文件名 %} 

 6、使用simple_tag和filter(如何调用)

  {{num|filter_multi:2 }} #24 其中num=12

 

  4、模板继承

1、创建母版base.html;
2、base.html中在设置
{% block content %}
     设置盒子

{% endblock %}

 3、子.html文件中

{% extends "base.html" %} //继承母板结构

{% block content %}
     此处写自己的html代码
    
{% endblock %}

   5 自定义模板升级 inclusion_tag 

rbacmenu.py (模板文件)


from
django import template register = template.Library() # register的名字是固定的,不可改变 @register.inclusion_tag(rbac/menu.html) #指定传递给传递给 rbac/menu.html文件 def get_menu(request): # 权限侧边栏 permission_list = request.session[permissions_list] per_list = [] for permission in permission_list: if permission.get(type) == "menu": per_list.append(permission) return {"per_list":per_list}

 

rbac/menu.html 代码

{% for permission in per_list %}
    <div><a href="{{ permission.url}}">{{ permission.title }}</a></div>
{% endfor %}

 

调用方法

        <div class="left-menu">

             {% block side_bar %}
                {% load rbacmenu %}
                {% get_menu request %}  //此处调用,并传递参数request

             {% endblock side_bar %}
        </div>

 

 

 

django url分发,视图,模板回顾

标签:display   ret   content   get   size   div   hive   library   浏览器   

原文地址:https://www.cnblogs.com/angle6-liu/p/10209099.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!