分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

Django(二) ?url 和 模板

发布时间:2023-09-06 02:16责任编辑:林大明关键词:url

1. URL

URL地址说明:
使用url给视图函数传参数
在url配置中将正则部分小括号括起来。比如:
 ???url(r‘^time/plus/(\d{1,2})/$‘, views.hours_ahead)
如果有多个参数则用/隔开,参数需要用分组,比如:
 ???url(r‘^time/plus/(\d{1,2})/(\d{1,2})/$‘, views.hours_ahead),
给参数命名,使用正则分组的别名,比如:
 ???url(r‘^time/plus/(?P<time1>\d{1,2})/(?P<time2>\d{1,2})/$‘, views.hours_ahead)
使用分组别名之后,视图函数的参数必须用分组的别名,但是位置可以不固定。
?
给url取别名,那么在使用此url的地方可以使用别名。比如:
 ???url(r‘^buy/$‘, views.buy, name=‘buy‘),
 ???url(r‘^login/$‘, views.login, name=‘login‘),
 

2. 反向解析

在视图函数中,反向解析url:
   ?from django.shortcuts import render, redirect
   ?from django.urls import reverse
   ?def buy(request):
       ?return redirect(reverse(‘index‘))
       ?return redirect(reverse(‘detail‘, args=[2]))
       ?return redirect(reverse(‘detail‘, kwargs={"id": 2}))
在templates中,使用别名:
 ???{% url ‘detail‘ stu.id %}
?
使用命名空间:
   ?在工程的urls.py文件中,在include时,可以指定命名空间,更加细化的划分url。比如: 
 ???????url(r‘^App/‘, include(‘App.urls‘, namespace=‘App‘)),
 ???指定命令空间后,使用反向解析时需要加上命名空间,比如:
 ???????在视图函数中: return redirect(reverse(‘students:index‘))
 ???????在templates中: {% url ‘students:detail‘ %}
 

3. 模板

在Django框架中,模板是可以帮助开发者快速生成呈现给用户页面的工具
模板的设计方式实现了我们MVT中VT的解耦,VT有着N:M的关系,一个V可以调用任意T,一个T可以供任意V使用
模板处理分为两个过程
 ???加载
 ???渲染
模板主要有两个部分
 ???HTML静态代码
 ???模板语言,动态插入的代码段(挖坑,填坑)
模板中的动态代码段除了做基本的静态填充,还可以实现一些基本的运算,转换和逻辑
?
模板中的变量: 视图传递给模板的数据,遵守标识符规则
 ???语法: {{ ?var }}
 ???如果变量不存在,则插入空字符串
   ?
 ???python manage.py shell: 进入Python环境, 且会自动导入Django配置,建议使用
 
   ?>>> python manage.py shell   # 进入python环境
 ???>>> from django import template
 ???>>> t = template.Template(‘My name is {{ name }}.‘)
 ???>>> c = template.Context({‘name‘: ‘Nige‘})
 ???>>> print (t.render(c))
 ???My name is Nige.
 ???>>> c = template.Context({‘name‘: ‘Barry‘})
 ???>>> print (t.render(c))
 ???My name is Barry.
模板中的点语法
字典查询
 ???>>> from django.template import Template, Context
 ???>>> person = {‘name‘: ‘Sally‘, ‘age‘: ‘43‘}
 ???>>> t = Template(‘{{ person.name }} is {{ person.age }} years old.‘)
 ???>>> c = Context({‘person‘: person})
 ???>>> t.render(c)
 ???‘Sally is 43 years old.‘
   ?
属性或者方法
 ???>>> from django.template import Template, Context
 ???>>> import datetime
 ???>>> d = datetime.date(2017, 5, 2)
 ???>>> d.year
 ???2017
 ???>>> d.month
 ???5
 ???>>> d.day
 ???2
 ???>>> t = Template(‘The month is {{ date.month }} and the year is {{ date.year }}.‘)
 ???>>> c = Context({‘date‘: d})
 ???>>> t.render(c)
 ???‘The month is 5 and the year is 2017.‘
 ???>>> from django.template import Template, Context
 ???>>> class Person(object):
 ???...     def __init__(self, first_name, last_name):
 ???...         self.first_name, self.last_name = first_name, last_name
 ???>>> t = Template(‘Hello, {{ person.first_name }} {{ person.last_name }}.‘)
 ???>>> c = Context({‘person‘: Person(‘John‘, ‘Smith‘)})
 ???>>> t.render(c)
 ???‘Hello, John Smith.‘
方法不能有参数。
 ???>>> from django.template import Template, Context
 ???>>> t = Template(‘{{ var }} -- {{ var.upper }} -- {{ var.isdigit }}‘)
 ???>>> t.render(Context({‘var‘: ‘hello‘}))
 ???‘hello -- HELLO -- False‘
 ???>>> t.render(Context({‘var‘: ‘123‘}))
 ???‘123 -- 123 -- True‘
列表,使用索引,不允许负索引
 ???>>> from django.template import Template, Context
 ???>>> t = Template(‘Item 2 is {{ items.2 }}.‘)
 ???>>> c = Context({‘items‘: [‘apples‘, ‘bananas‘, ‘carrots‘]})
 ???>>> t.render(c)
 ???‘Item 2 is carrots.‘
模板中的小弊端,调用对象的方法,不能传递参数
?
模板中的标签
语法 {% ?tag ?%}
作用
 ???1. 加载外部传入的变量 ?
 ???2. 在输出中创建文本
 ???3. 控制循环或逻辑
if 语句:
 ???格式:
 ???if单分支
 ???????{% if ?表达式 %}
 ????  ?????语句
 ???????{% endif ?%}
 ???if双分支
 ???????{% ?if 表达式 %}
 ????  ?????语句
 ???????{% else ?%}
 ????  ?????语句
 ???????{% endif %}
 ???if多分支
 ???????{% if 表达式 %}
       ?????语句
 ???????{% elif 表达式 %}
       ?????语句
       ?{% else ?%}
 ????  ?????语句
 ???????{% endif %}
 ???判断true或false
 ???????{% if today_is_weekend %}
 ???????????<p>Welcome to the weekend!</p> 
 ???????{% endif %}
 ???使用 and or not,可结合使用,and和or中 and具有更高优先权。
 ???????{% if athlete_list and coach_list %}
 ????  ?????<p>Both athletes and coaches are available.</p>
 ???????{% endif %}
 ???????{% if not athlete_list %}
 ????  ?????<p>There are no athletes.</p>
 ???????{% endif %}
 ???????{% if athlete_list or coach_list %}
 ????  ?????<p>There are some athletes or some coaches.</p>
 ???????{% endif %}
 ???????{% if not athlete_list or coach_list %}
 ???????????<p>There are no athletes or there are some coaches.</p>
 ???????{% endif %}
?
 ???????{% if athlete_list and not coach_list %}
 ???????????<p>There are some athletes and absolutely no coaches.</p>
 ???????{% endif %}
 ???使用多个相同的逻辑操作关键字也是允许的,比如:
 ???????{% if athlete_list or coach_list or parent_list or teacher_list %}
 ???使用 in和not in,
 ???????{% if "bc" in "abcdef" %}
 ???????????This appears since "bc" is a substring of "abcdef"
 ???????{% endif %}
 ???????{% if user not in users %}
 ???????????If users is a list, this will appear if user isn‘t an element of the list.
 ???????{% endif %}
 ???使用 is 和 is not
 ???????{% if somevar is True %}
 ???????????This appears if and only if somevar is True.
 ???????{% endif %}
?
 ???????{% if somevar is not None %}
 ???????????This appears if somevar isn‘t None.
 ???????{% endif %}
 
 
for 语句:
 ???{% for 变量 in 列表 %}
 ???????语句1 
 ???{% empty %}
 ???????语句2
 ???{% endfor %}
 ???当列表为空或不存在时,执行empty之后的语句
 ???{{ forloop.counter }} 表示当前是第几次循环,从1数数
 ???{% for item in todo_list %}
 ????  ?<p>{{ forloop.counter }}: {{ item }}</p>
 ???{%endfor %}
 ???{{ forloop.counter0}}表示当前是第几次循环,从0数数
 ???{{ forloop.revcounter}}表示当前是第几次循环,倒着数数,到1停
 ???{{ forloop.revcounter0}}表示当前第几次循环,倒着数,到0停
 ???{{ forloop.first }} 是否是第一个 ?布尔值
 ???{% for object in objects %}
 ????  ?{% if forloop.first %}
 ????      ?<li class="first">
 ????  ?{% else %}
 ????      ?<li>
 ????  ?{% endif %}
 ????  ?{{ object }}</li>
 ???{% endfor %}
 ???{{ forloop.last }} 是否是最后一个 布尔值
 ???{% for link in links %}
 ???????{{ link }}{% if not forloop.last %} | {% endif %}
 ???{% endfor %}
 ???forloop.parentloop
 ???{% for country in countries %}
 ?????<table>
 ????    ?{% for city in country.city_list %}
 ????    ?<tr>
 ????        ?<td>Country #{{ forloop.parentloop.counter }}</td>
 ????        ?<td>City #{{ forloop.counter }}</td>
 ????        ?<td>{{ city }}</td>
 ????    ?</tr>
 ????    ?{% endfor %}
 ?????</table>
 ????{% endfor %}
注释:
 ???单行注释
 ???{# ?被注释掉的内容 ?#}
?
 ???多行注释
 ???{% comment %}
 ???????内容
 ???{% endcomment %}
过滤器: 
 ???{{ var|过滤器 }}
 ???作用:在变量显示前修改
 ???add {{ value|add:2 }}
 ???没有减法过滤器,但是加法里可以加负数
 ???????{{ value|add:-2 }}
 ???lower 
 ???????{{ name|lower }}
 ???upper
 ???????{{ my_list|first|upper }}
 ???截断:
 ???????{{ bio|truncatechars:30 }}
 ???过滤器可以传递参数,参数需要使用引号引起来
 ???比如join: {{ students|join:‘=‘ }}
 ???默认值:default,格式 {{var|default:value}}
 ???如果变量没有被提供或者为False,空,会使用默认值
?
 ???根据指定格式转换日期为字符串,处理时间的
 ???就是针对date进行的转换
 ???????{{ ?dateVal | date:‘y-m-d‘ }}
HTML转义
 ???将接收到的数据当成普通字符串处理还是当成HTML代码来渲染的一个问题
?
 ???渲染成html:{{ code|safe }}
 ???关闭自动转义
 ???{% autoescape off%}
 ???????code
 ???{% endautoescape %}
 ???打开自动转义转义
 ???{% autoescape on%}
 ???????code
 ???{% endautoescape %}
模板继承
 ???block:挖坑
 ???????{% block XXX%}
 ???????????code
 ???????{% endblock %}
?
 ???extends 继承,写在开头位置
 ???????{% extends ‘父模板路径‘ %}
?
 ???include: 加载模板进行渲染
         {% include ‘模板文件‘ %}
?
?
?
?
   ?
 

Django(二) ?url 和 模板

原文地址:https://www.cnblogs.com/gugubeng/p/9722990.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved