• Django基础四之模板系统


    自定标签和过滤器

    自定义过滤器
    
    1. app应用文件夹中创建一个templatetags文件件,必须是这个名字
    2. templatetags文件夹中创建一个 xx.py文件,文件名字随便起
    
    3. 创建自定义过滤器
        from django import template
    
        register = template.Library()  #register固定的名字,注册器
    
        # @register.filter
        # def oo(v1,v2):  #不带参数的过滤器
        #     s = v1 + 'xxoo'
    
        #     return s
    
        @register.filter
        def oo(v1,v2):  #带参数的过滤器
            s = v1 + v2
            return s
        
    4. 使用  html文件中  {% load 文件名 %} 
        {% load xx %}
        {{ values|oo }} -- 无参数
        {{ values|oo:'asdf' }} -- 有参数
    
    5. 注意:参数最多两个
    
    
    自定义标签
    1. app应用文件夹中创建一个templatetags文件件,必须是这个名字
    2. templatetags文件夹中创建一个 xx.py文件,文件名字随便起
    3. 创建自定义标签
        @register.simple_tag
        def mytag(v1,v2,v3):  
            s = v1 + '和B哥' + v2 + v3
            return s
    
    4.使用
        {% load xx %}
        {% mytag s1 '和相玺' '和大壮' %}  
    5. #可以传多个参数

    inclusion_tag

    1. app应用文件夹中创建一个templatetags文件件,必须是这个名字
    2. templatetags文件夹中创建一个 xx.py文件,文件名字随便起
    3. 创建自定义inclusion_tag
        @register.inclusion_tag('inclusiontag.html')
        def func(v1):
    
            return {'oo':v1}
    4. func的return数据,传给了inclusiontag.html,作为模板渲染的数据,将inclusiontag.html渲染好之后,作为一个组件,生成到调用这个func的地方
    5. 使用
        {% load xx %}
        {% func l1 %}

    静态文件配置

    js、css、img等都叫做静态文件,那么关于django中静态文件的配置,我们就需要在settings配置文件里面写上这写内容:

    1 在项目中创建一个文件夹,比如叫jingtaiwenjian
    
    # STATIC_URL = '/xxx/' #别名,随便写名字,但是如果你改名字,别忘了前面页面里面如果你是通过/xxx/bootstrap.css的时候,如果这里的别名你改成了/static/的话,你前端页面的路径要改成/static/bootstrap.css。所以我们都是用下面的load static的方式来使用静态文件路径
    2 STATIC_URL = '/static/' #别名
    
    3 STATICFILES_DIRS = [
        os.path.join(BASE_DIR,'jingtaiwenjian'), #注意别忘了写逗号,第二个参数就是项目中你存放静态文件的文件夹名称
    ]

    目录:别名也是一种安全机制,浏览器上通过调试台你能够看到的是别名的名字,这样别人就不能知道你静态文件夹的名字了,不然别人就能通过这个文件夹路径进行攻击。

        img

     

     

     

     前端页面引入静态文件的写法,因为别名也可能会修改,所以使用路径的时候通过load static来找到别名,通过别名映射路径的方式来获取静态文件

        img

     

     

    {% static %}

    {% load static %}<img src="{% static "images/hi.jpg" %}" alt="Hi!" />

    引用JS文件时使用:

    {% load static %}
    <script src="{% static "mytest.js" %}"></script>

    某个文件多处被用到可以存为一个变量

    {% load static %}
    {% static "images/hi.jpg" as myphoto %}
    <img src="{{ myphoto }}"></img>

    {% get_static_prefix %}

    {% load static %}
    <img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />

    或者

    {% load static %}
    {% get_static_prefix as STATIC_PREFIX %}
    
    <img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
    <img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />

    orm

    orm  -- Object Relational Mapping
    
    将类对象 --- sql
    
    类  --  表
    
    对象 -- 行
    
    属性  -- 字段
    app01 应用下 的models.py文件中写
        class UserInfo(models.Model):
    
            id = models.AutoField(primary_key=True)
    
            name = models.CharField(max_length=16,null=True,blank=True,db_index=True)
    
            age = models.IntegerField(default=1,unique=True,choices=((1,'男'),(2,'女'),(3,'二椅子')))
    
            current_date = models.DateField(auto_now=True,auto_now_add=True)
    
    不连接mysql的话,默认连接的是sqlite数据库
    
    配置连接mysql
    1 settings.py 文件中找DATABASES这个配置,改为
        # DATABASES = {
        #     'default': {
        #         'ENGINE': 'django.db.backends.sqlite3',
        #         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        #     }
        # }
    
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'HOST':'127.0.0.1',
                'PORT':3306,
                'NAME':'orm01',
                'USER':'root',
                'PASSWORD':'123',
            }
        }
    
    2 项目文件夹下的init文件中,写上下面两句
        import pymysql
        pymysql.install_as_MySQLdb()
    
    3 执行数据库同步指令
        python manage.py makemigrations
        python manage.py migrate

     

  • 相关阅读:
    运算符和表达式详解
    超实用的Java web面试题
    80道最新java基础部分面试题(七)
    80道最新java基础部分面试题(六)
    80道最新java基础部分面试题(五)
    12道算法与编程面试题
    javaee和javase的区别
    2019年最新50道java基础部分面试题(四)
    2019年最新50道java基础部分面试题(三)
    2019年最新50道java基础部分面试题(二)
  • 原文地址:https://www.cnblogs.com/zengluo/p/13389083.html
Copyright © 2020-2023  润新知