python Django学习笔记 2020-11-11(html中使用if.else,提交表单不改变下拉框已选值,数据库增删改查,外键,div边角变圆,数据库倒序查找及显示,日期选择组件参数赋值)

12 篇文章 0 订阅

1、html5中使用if…else…

<!-- if...else... -->
{% if submited_peo != "全部" %}
     <option>全部</option>
{% endif %}
<!--搭配for循环使用-->
{% for name in input_names %}
    {% if name.input_name != submited_peo %}
        <option>{{name.input_name}}</option>
    {% endif %}
{% endfor %}
1-2、提交表单,不改变下拉框已选项

点击提交表单后,html重载,导致下拉框内容重置。我想到的解决方法是将上一次的选择的内容使用变量存储下来,然后在页面加载之前赋予到下拉框的最上层。

自己写了一个判断来解决:
view.py中:
使用变量来接收并存储下拉框的内容:

#添加初始值为:
#(注:如果包含跳转,那跳转前的页面也要加这段增添初始值,否则跳转后submited_item会是空白)
submited_item = "全部"
#因为select_item在下面的数据处理中用到了,所以就用submited_item来存储上一次选择的值 
select_item = request.POST.get("select_item", None)
submited_item = select_item

html中:

    <label style="float:left;margin-top:9px;margin-left:10px">选择提交人:</label>
    <select id="select1" class="form-control" name="select_duty" style="width:64%;margin-left: 25px;">
        <option>{{submited_peo}}</option>
        {% if submited_peo != "全部" %}
             <option>全部</option>
        {% endif %}
        {% for name in input_names %}
             {% if name.input_name != submited_peo %}
                  <option>{{name.input_name}}</option>
             {% endif %}
        {% endfor %}
    </select>

成功解决!

开始时:
在这里插入图片描述

选择并提交表单后:
在这里插入图片描述

2、数据库表增删改查

查找:

# submit_items返回createitem表中所有duty_peo属性值为jcy的数据
# submit_items[0].item_name表示返回的第一条数据的item_name属性的值
submit_items = models.CreateItem.objects.filter(duty_peo='jcy')
print(submit_items[0].item_name)

# 用法类似,其中get仅适用于返回一条数据的情况,返回两条数据或不返回都会报错
submit_items = models.CreateItem.objects.get(duty_peo='jcy')
print(submit_items.item_name)

插入记录:

#一一对应,每一个属性都要有对应的值
models.CreateItem.objects.create(item_name=item_name, duty_peo=duty_peo, total_date=last_date
                                                    , participate_member=participate_member
                                                    , create_date_time=create_date_time).save()

删除记录:

# 删除Users表中username属性为jcy的所有数据
models.Users.objects.filter(username='jcy').delete()

修改记录:

# 修改CreateItem中所有数据的datetime属性为2019-11-02
models.CreateItem.objects.all().update(datetime='2019-11-02')
# 修改Users表中username为jcy的数据password属性为123123
models.Users.objects.filter(username='jcy').update(password='123123')

3、外键的使用

这段代码来自哪里找不到了,由于我的表结构中没有使用到外键所以先放在这里:

from django.db import models
class Category(models.Model):
    name = models.CharField(max_length=100)

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    # on_delete=models.CASCADE表示级联删除,
    # 当删除主表的数据时候从表中的数据也随着一起删除,不加会报错。
    category = models.ForeignKey('Category',on_delete=models.CASCADE)

4、css实现圆角效果

border-radius:用这个属性能实现圆角边框的效果。现在只有Mozilla/Firefox 和 Safari 3支持该属性。
-webkit-border-radius:苹果;谷歌,等一些浏览器认,因为他们都用的是webkit内核;
-moz-border-radius:moz这个属性 主要是专门支持Mozilla Firefox 火狐浏览器的CSS属性。

使用时:

<div style="background-color:#ccc; 
-moz-border-radius: 5px; 
-webkit-border-radius: 5px; 
border:1px solid #000; 
padding:10px;" 
>

变圆后的边角:
在这里插入图片描述
border-radius;使用时border-radius: 5px 5px 5px 5px;四个像素值分别对应四角

5、数据库查询结果倒序显示

使用order_by:

这是顺序:

submited_items = models.SubmitItem.objects.order_by("submit_date")

这是倒序:

submited_items = models.SubmitItem.objects.order_by("-submit_date")

使用时:

<div style="overflow: auto;">
    <ul class="list-group" >
        {% for sub_items in submited_items %}
        <li class="list-group-item list-group-item-success" style="height:35px;">
        {{sub_items.submit_date|date:"Y-m-d H:i:s"}} {{sub_items.submit_peo}} 更新了 {{sub_items.item_name}} 
        </li>
        {% endfor %}
    </ul>
</div>

查询时:

submit_items = models.SubmitItem.objects.filter(submit_date__startswith=select_date,
                                                item_name__startswith=select_item,
                                                submit_peo__startswith=submit_peo).order_by("-submit_date")

6、javascript控制date日期选择框显示日期

//id与date选择框的id保持一致
//显示当前日期
document.getElementById('select_date1').valueAsDate = new Date();
//显示固定日期(使用 - 连接正常显示,使用 / 连接挥往前推一天)
document.getElementById('select_date1').valueAsDate = new Date('2019-11-12');

7、javascrip使用django中的参数

比如:
view.py中定义参数:

selected_date = "2019-03-12"

在html中搭配javascript使用:

var selected_date = "{{selected_date}}";
document.getElementById('select_date1').valueAsDate = new Date(selected_date);

执行结果:
在这里插入图片描述

7-2、日期输入框的动态变化

那么想要日期输入框也不跟着表单提交一起重置,就可以这样实现了:

html中:

//javascript中添加日期输入框的动态显示
var selected_date = "{{selected_date}}";  //django中的参数名
document.getElementById('select_date1').valueAsDate = new Date(selected_date);   //绑定控件

那么日期选择框显示的日期就和Django中的变量selected_date绑定在一起了,接下来只需要考虑怎么处理django中的这个变量了。

view.py中:
首先添加变量并赋予初值:(跳转入口也要赋值,否则跳转以后为空)

# 表示当第一次加载没有选择日期的时候,默认显示当前的日期
# 尝试过直接用datetime.now().date(),但是javascript无法识别,转为字符串后显示正常
selected_date = str(datetime.now().date())

接着将上一次读取到的选择的日期赋予它:

# 注意这里是使用组件的name获取,而javascript中使用的是id,所以获取的名称不同,不要认错了
# select_date下面要进行处理,所以还是用selected_date来接收
select_date = request.POST.get("select_date", None)
selected_date = select_date

接着就实现了,即使表单页面提交或者刷新了,日期选择框也不会重置改变。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值