西游之路——python全栈——瀑布流

###############################

class Picture(models.Model):
    src = models.ImageField(verbose_name=‘图片路径‘, upload_to=‘./static/images/picture/‘)
    title = models.CharField(verbose_name=‘标题‘, max_length=32)
    summary = models.CharField(verbose_name=‘简介‘, max_length=32)

    class Meta:
        verbose_name_plural = ‘图片‘

    def __str__(self):
        return self.title

Models.py Code

##############################

 1 def picture(request):
 2     picture_list = models.Picture.objects.all()
 3     return render(request, ‘picture.html‘, locals())
 4
 5 def get_img(request):
 6     nid = request.GET.get(‘nid‘)
 7     picture_list = models.Picture.objects.filter(id__gt=nid).values(‘id‘,‘title‘,‘src‘)
 8     # print(picture_list)  # <QuerySet [{‘k1‘:v1,‘k1:v2‘},{‘k1‘:v3,‘k1:v4‘}]>
 9     picture_list = list(picture_list)
10     # print(picture_list)   # [{‘k1‘:v1,‘k1:v2‘},{‘k1‘:v3,‘k1:v4‘}]
11     ret = {‘status‘:True,‘data‘:None}
12     ret[‘data‘] = picture_list
13
14     return HttpResponse(json.dumps(ret))

View.py Code

#############################

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <style>
 7         .w{
 8             width: 1000px;
 9             margin: 0 auto;
10         }
11         .item{
12             width: 25%;
13             float: left;
14         }
15         .item img{
16             width: 100%;
17         }
18     </style>
19 </head>
20 <body>
21         <div>姑娘们</div>
22         <div class="w" id="container">
23             <div class="item">11</div>
24             <div class="item">22</div>
25             <div class="item">33</div>
26             <div class="item">44</div>
27         </div>
28
29         <script src="/static/js/jquery.js"></script>
30         <script>
31             $(function() {
32                 var obj = new ScrollImg();
33                 obj.initImg();
34                 obj.scrollEvent();
35             });
36             function ScrollImg() {
37                 this.NID = 0;
38                 //赋值-1或展示列数减1,解决第一次展示时第一个位置对应第一张图片
39                 this.lastPosition = -1;
40                 this.initImg = function initImg() {
41                     //**************this = obj*************
42                     var that = this;
43                     $.ajax({
44                         url: ‘/get_img.html‘,
45                         type: ‘GET‘,
46                         data: {nid:this.NID},
47                         dataType: ‘JSON‘,
48                         success:function(arg) {
49                             var img_list = arg.data;
50                             $.each(img_list,function (index,v) {
51                                 //index为从零开始的序号,v为循环出来的对象
52                                 //console.log(index,v);
53                                 //加cont+1为了使下次下次展示的图片能接上
54                                 var eqv = (index+that.lastPosition+1) % 4;
55                                 console.log(eqv);
56                                 var tag = document.createElement(‘img‘);
57                                 tag.src = ‘/‘ + v.src;
58                                 //$(‘#container‘).children().eq(eqv)先找到container下children与eqv匹配的序号
59                                 //然后再append插入img标签,这里需要创建tag
60                                 $(‘#container‘).children().eq(eqv).append(tag);
61                                 //判断循环结束,并记录结束时ID和eqv
62                                 if(index+1 == img_list.length) {
63                                     //为什么不加var?
64                                     that.lastPosition = eqv;
65                                     //that.NID = v.id;
66                                 }
67                             });
68                         }
69                     });
70                 };
71                 this.scrollEvent = function scrollEvent() {
72                     //this = obj
73                     var that = this;
74                     //当滚轮到达最底部时,执行initImg()
75                     $(window).scroll(function() {
76                         //什么时候到达最底部?
77                         //文档高度
78                         var docHeight = $(document).height();
79                         //窗口高度
80                         var winHeight = $(window).height();
81                         //滚动条可滚动高度
82                         var scrollTop = $(window).scrollTop();
83                         var scrollTop = Math.round(scrollTop);
84                         //检查监听情况
85                         //console.log(docHeight,winHeight,scrollTop);
86                         if(winHeight+scrollTop == docHeight) {
87                             //console.log(1);
88                             that.initImg();
89                         }
90                     });
91                 };
92             }
93         </script>
94
95 </body>
96 </html>

HTML Code

注意:避免定义全局变量,需用对象进行封装

要点:

  - 布局
  - 文档、窗口、滚动
  - 面向对象的封装:this,that

原文地址:https://www.cnblogs.com/Lujun1028/p/9646000.html

时间: 2024-08-01 17:11:07

西游之路——python全栈——瀑布流的相关文章

西游之路——python全栈——Django~1

知识预览 Django基本命令 二 路由配置系统(URLconf) 三 编写视图 四 Template 五 数据库与ORM admin的配置 一 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端.   最简单的Web应用就是先把HTML用文件保存好,用一个现

西游之路——python全栈——通用模块(pager、check_code、form验证)

1.验证码 1 import random 2 from PIL import Image, ImageDraw, ImageFont, ImageFilter 3 4 _letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z 5 _upper_cases = _letter_cases.upper() # 大写字母 6 _numbers = ''.join(map(str, range(3, 10))) # 数字 7

西游之路——python全栈——自定义用户认证

django自定义用户认证(使用自定义的UserProfile,而不是django自带的),就需要(django要求)将为UserProfile单独创建一个app,这个app啥也不干,就是为UserProfile而生的; 这里我们创建一个app,名字叫做custom_auth,事实上,我们只需要对其中的models文件和admin.py做操作就可以了; 第一步:  创建user model 下面是models.py文件的内容: 1 from django.utils.safestring imp

西游之路——python全栈——django中models配置

目录 Django支持多种数据库,sqlite,mysql,oracle等,其默认数据库是sqlite 在settings文件中可以发现: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } 其默认数据库是sqlite3 要想使用其他数据库,需要修改相应的引擎和配置 (1)sqlite: 'ENGINE': 'dja

西游之路——python全栈——Form组件字段及动态绑定

一.HTML中 | safe  可在后台用以下方式处理 1 text = "<input type'text' />" 2 from django.utils.safestring import mark_safe 3 text = mark_safe(text) 二.views.py操作 1 from django.shortcuts import render 2 3 from django import forms 4 from django.forms import

西游之路——python全栈——报障系统之后台管理

一.后台管理页面布局 1.用户: - 普通用户 知识库+提交报账单+个人信息 - 管理员 知识库+提交报账单+个人信息+处理报账单 - 超级管理员 知识库+提交报账单+个人信息+处理报账单+报障统计信息 权限管理2.菜单: - 知识库管理 文章 标签 分类 - 报障管理 个人报障 报障处理 报障统计信息 - 权限管理 菜单 权限 角色 二.公共模板及路由分发 1.后台菜单栏.导航栏 1 <!DOCTYPE html> 2 <html lang="en"> 3 &

西游之路——python全栈——ORM之SQLAlchemy(1)

目录 定义一个类,ORM(对象关系映射)将这个类转换为sql语句,使用pymysql进行执行 一,底层处理 使用engine/connectionpooling/dialect进行数据库操作,engine使用connectionpooling连接数据库,然后在通过dialect执行sql语句(SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API) pymysql mysql+pymysql:/

西游之路——python全栈——ORM之SQLAlchemy(3)外键与relationship的关系

目录 relationship是为了简化联合查询join等,创建的两个表之间的虚拟关系,这种关系与标的结构时无关的.他与外键十分相似,确实,他必须在外键的基础上才允许使用 不然会报错: sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship Father.son - there are no foreign keys link

Python全栈之路系列之赋值与运算符

Python全栈之路系列之赋值与运算符 在继续下面的文章之前我们先来浏览一下Python为我们提供的几种运算符,定义两个变量,分别是a和b,a的值是10,b的值是20. 算术运算符 运算符 描述 实例 + 加,两个对象相加 a+b=30 - 减,两个对象相减,可能会得到负数 a-b=-10 * 乘,两数相称或是返回一个被重复若干次的字符串 a*b=200 / 除,两个对象相除 b/a=2 % 取膜,返回除法的余数 b%a=0 ** 幂,返回x的y次幂 a**b=10000000000000000