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

原文地址:https://www.cnblogs.com/straightup/p/13419594.html