django模板语法+密码加入环境变量

将账号密码加入环境变量

编辑环境变量文件

​ 1、vim ~/.bashrc

​ 2、在文件末尾加入

​ export 你的环境变量名字=对应的值

​ 3、在你运行启动服务命令的窗口执行

​ source ~/.bashrc (激活新的环境)

python 程序里 怎么拿环境变量

~
from os import environ
environ.get("你设置的环境变量")
~

model继承

什么时候用

​ 当model出现很多重复的字段 我们可以考虑给他们写一个合理的抽象类

怎么用:

~~~
class Humen(models.Model):
name = models.CharField(
max_length=20,
verbose_name=’人名’
)
age = models.IntegerField(
verbose_name=’年纪’,
default=1
)
sex = models.CharField(
max_length=6,
verbose_name=’性别’
)

class Meta:
    abstract = True

class Stu(Humen):
score = models.IntegerField(
verbose_name=’成绩’
)

class Teacher(Humen):
salary = models.IntegerField(
verbose_name=’工资’
)

~~~

模板的处理过程(不是很重要)

1 加载

2 渲染

原生写法

~
def get_teachers_v1(req):
# 加载模板
template = loader.get_template('teachers.html')
# print(template)
# print(dir(template))
# 拿数据
result = Teacher.objects.all()
# 渲染模板 同时也加入了数据
template_str = template.render({'teachers': result})
print(template_str)
# 将渲染得到的HTML字符串返回给请求
return HttpResponse(template_str)
~

模板语法

1 点语法

​ 通过变量访问属性或者方法

~~~

    {%for i in teachers%} #{{i.name}}是在访问属性
  • {{i.name}}老师的工资是{{i.salary}}美金
  • #{{i.get_base_msg}}访问方法 不能传参数

    {{i.get_base_msg}}

    #{%empty%} 在数据为空的时候 显示出来 不为空 就不显示 {%empty%}

    请说东北话

    {%endfor%}

~~~

2 下标访问数组内的元素

~
{{teachers.0.get_base_msg}}
~

3 if 条件判断

~~~
格式: {% if 表达式 %}
语句
{% endif %}

{%  if 表达式 %}
         语句
{% else  %}
         语句
{% endif %}
{% if 表达式 %}
                  语句    
{% elif 表达式 %}
                  语句
{% endif %}

~~~

使用实例(注意等号两边的空格)

~
{%if i.id == 2%}

  • {{i.name}}老师的工资是{{i.salary}}美金
  • {%else%}
  • {{i.name}}老师的工资是{{i.salary}}美金
  • {%endif%}
    ~

    4 乘除

    ~~~
    语法格式:{% widthratio 数 分母 分子 %}

    {%for i in teachers%}
        {%widthratio i.age 4 3%}
    {%endfor%}
    

    ~~~

    5 整除

    ​ 语法格式:{% if 你的数字|divisibleby:要整除几 %}

    ​ 使用实例

    ~
    {%for i in teachers%}
    {%if i.id|divisibleby:2%}

  • {{i.get_base_msg}}
  • {%else%}
  • {{i.get_base_msg}}
  • {%endif%}
    {%endfor%}
    ~

    6 注释:

    ​ 单行 不可见 {#你想注释的内容#}

    ​ 多行不可见

    ~
    {%comment%}
    你的一大堆注释
    {%endcomment%}
    ~

    7 获取循环次数

    {{ forloop.counter }} 表示当前是第几次循环,从1数数

    {{forloop.counter0}}表示当前是第几次循环,从0数数

    {{ forloop.revcounter}}表示当前是第几次循环,倒着数数,到1停

    {{forloop.revcounter0}}表示当前第几次循环,倒着数,到0停

    {{ forloop.first }} 是否是第一个 布尔值

    {{ forloop.last }} 是否是最后一个布尔值

    8判断是否等于

    {%ifequal teachers.1.id 2%}
        等于
    {%else%}
        不等于
    {%endifequal%}

    9 操作

    ~~~
    add {{ 变量 | add : 5 }}

    没有减法过滤器,但是加法里可以加负数
    {{ 变量 | add : -5}}

    lower 将字母转小写
    {{ 变量|lower }}
    upper 将字母转大写

    ~~~

    反向解析(重要)

    ​ 根据命名空间和URL名字找到对应的处理逻辑 (蔡中能同学脱单的经历)

    怎么做

    1 在工程的urls.py

    ​ 在include方法 加入namespace 来定义你的命名空间

    ~
    url(r'^t4/', include("t4.urls", namespace="python1803"))
    ~

    2 在项目的url.py里 加入name参数 给url指定一个名字

    ~
    url(r"^lolstu$", get_stu, name="czn"),
    ~

    3 前端

    ​ {%url ‘命名空间的名字:url的名字’%}

    4 后端

    ~
    def index(req):
    return HttpResponseRedirect(reverse('python1803:czn'))
    解释:HttpResponseRedirect 是重定向
    reverse('命名空间的名字:url的名字')
    ~

    需求:解析url路径里面的参数 去数据库对应老师

    ​ 1 先去允许url 写成可变的

    ~
    url(r"teacher/(?P\d+)/(?P\d+)", get_teacher, name='zhangsan'),
    ~

    ​ 2 views.py里 对应的处理请求函数 要加入对应参数的占位

    ~
    def get_teacher(req, t_id, a_id):
    正常写
    ~

    ​ 前端写法:

    ~
    {%url 'python1803:zhangsan' t_id=2 a_id=3%}
    ~

    ​ 后端写法

    ~
    return HttpResponseRedirect(reverse('python1803:zhangsan', kwargs={'a_id':3, 't_id': 1}))
    ~

    页面继承(复用)

    ​ 1 在基础页面 确定占位

    ​ 占了位置(挖了哪些坑)

    ~
    1 js引用
    2 CSS 引用
    3 网页结构
    4 额外的js css页面内代码
    ~

    ​ 2 语法

    ~
    {%block 名字%}
    {%endblock%}
    ~

    ​ 3 继承

    ~
    {%extends '文件名字'%}
    接下来要填坑
    {%block 名字%}
    写HTML
    {%endblock%}
    ~

    猜你喜欢

    转载自blog.csdn.net/wangxw1803/article/details/81667585