Django学习3
自定义过滤器和标签
自定义过滤器(@register.filter)
1.app应用文件夹中创建一个templatetags文件夹(必须是这个名字!)
2.templatetags文件夹中创建一个py文件
3.py文件中:
from django import template
# 注册标签和过滤器,固定名字register!
register = template.Library()
# @register.filter
# def eat(v1): # 不带参数的
# s = v1 + '在吃饭'
# return s
@register.filter
def eat(v1,v2): # 带参数的
s = v1 + v2
return s
4.在要渲染的html模板中:
{% load py文件名 %}
{#{{ s1|eat }}#}
{{ s1|eat:'幸福的生活在一起' }} # 之后和使用内置的方法一致 {{ }}
5.过滤器最多两个参数!
自定义标签(@register.simple_tag)
1.app应用文件夹中创建一个templatetags文件夹(必须是这个名字!)
2.templatetags文件夹中创建一个py文件
3.py文件中:
from django import template
register = template.Library()
@register.simple_tag
def mytag(v1,v2,v3): # 带多个参数
s = v1 + '在鹊桥' + v2 + v3
return s
4.在要渲染的html模板中:
{% load py文件名 %}
<div>
{% mytag s1 '一年相见' '一次' %} # 自定义的标签+对应的参数 (得到mytag的返回值) {% %}
</div>
5.可传多个参数
自定义标签inclusion_tag(@register.inclusion_tag('xx.html'))
1.app应用文件夹中创建一个templatetags文件夹(必须是这个名字!)
2.templatetags文件夹中创建一个py文件
3.py文件中:
from django import template
register = template.Library()
@register.inclusion_tag('inctag.html') # 这里传一个html文件,会将return的字典中的变量data传到该html文件中
def inctag():
return {'data':[11,22,33]}
4. 传入的inctag.html: # 接收到变量data并进行模板渲染
<ul>
{% for i in data %}
<li>{{ i }}</li>
{% endfor %}
</ul>
5.在使用inclusion_tag的html页面:
{% load py文件名 %}
{% inctag %} # 直接写inclusion_tag标签名即可,先前渲染过数据的inctag.html就会作为组件导入进来
6.可以传任意参数
小结:inclusion_tag把需要渲染的数据交给另一个html文件渲染好,然后将其作为组件插入到使用inclusion_tag的地方.
静态文件配置
1.首先在项目文件夹下创建一个文件夹,作存放静态文件用.
2.然后到settings.py文件配置.
STATIC_URL = '/static/' # 给下面的路径起别名,统一口径
# 配置静态文件路径
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'staticFile'),
]
3.html文件导入静态文件(以css1.css为例)
方法1:
STATIC_URL = '/static/'
<link rel="stylesheet" href="/static/css1.css/">
方法2:
在html顶部写上 {% load static %}
<link rel="stylesheet" href="{% static 'css1.css' %}">
方法3:
在html顶部写上
{% load static %}
{% get_static_prefix %}
<link rel="stylesheet" href="{% get_static_prefix %}css1.css">
方法4:
在html顶部写上
{% load static %}
{% get_static_prefix as gsp %}
<link rel="stylesheet" href="{{ gsp }}css1.css">
ORM
ORM --- Object Relational Mapping
映射关系:
将类对象 --- sql
类 --- 表
对象 --- 行
属性 --- 字段
1.在app01应用下的models.py中写类
class UserInfo(models.Model): # 先继承models.Model
id = models.AutoField(primary_key=True) # 创建类属性
name = models.CharField(max_length=16) # 16字符
age = models.IntegerField()
current_date = models.DateField()
2.默认连接sqlite数据库
3.配置并连接mysql
1.settings.py中配置和连接
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': 3306,
'NAME': '库名',
'USER': '用户名',
'PASSWORD': '密码',
}
}
2.项目文件夹下的__init__.py中(是项目文件夹,不是应用文件夹!)
import pymysql
pymysql.install_as_MySQLdb()
#MySQLdb是django默认的python连接mysql数据库的客户端模块,但它不支持py3.4以上的版本
#pymysql.install_as_MySQLdb() 这句指令将django连接mysql的模块替换成pymysql
3.执行数据库同步指令
python manage.py makemigrations
python manage.py migrate
查看类里的属性与mysql字段的映射关系 : django --- db --- backends --- mysql --- base.py