basic pagination working
This commit is contained in:
		
							parent
							
								
									ccd4628b4a
								
							
						
					
					
						commit
						e37c9dfb27
					
				
							
								
								
									
										57
									
								
								microblog.py
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								microblog.py
									
									
									
									
									
								
							| @ -1,7 +1,7 @@ | ||||
| 
 | ||||
| import sys | ||||
| 
 | ||||
| import subprocess | ||||
| import os | ||||
| 
 | ||||
| def make_post(num, timestamp, email, msg): | ||||
|     # used <a class> for name and email but it's not actually needed. | ||||
| @ -127,6 +127,48 @@ def make_tagcloud(d): | ||||
|         output.append(fmt % (key, d[key])) | ||||
|     return output | ||||
| 
 | ||||
| class Paginator: | ||||
|     def __init__(self, x, y, loc="./pages"): | ||||
|         self.TOTAL_POSTS = x | ||||
|         self.PPP         = y # posts per page | ||||
|         self.TOTAL_PAGES = int(x/y) | ||||
|         if self.TOTAL_PAGES > 0: | ||||
|             self.SUBDIR = loc | ||||
|             if not os.path.exists(loc): | ||||
|                 os.makedirs(loc) | ||||
|         pass | ||||
| 
 | ||||
|     def toc(self, n=None, page=None): #style 1 | ||||
|         if self.TOTAL_PAGES < 1 or (n == None and page == None): | ||||
|             return "[no pages]" | ||||
|         # For page 'n' do not create an anchor tag | ||||
|         fmt = "<a href=\"%s/%s\">[%i]</a>" #(self.subdir, page, page number) | ||||
|         anchors = [] | ||||
|         for i in range(self.TOTAL_PAGES): | ||||
|             if i != n: | ||||
|                 anchors.append(fmt % (self.SUBDIR, page, i)) | ||||
|             else: | ||||
|                 anchors.append("<b>[%i]</b>" % i) | ||||
|         return "\n".join(anchors) | ||||
| 
 | ||||
|     def singlepage(self, template, tagcloud, timeline): | ||||
|         tc = "\n".join(tagcloud) | ||||
|         tl = "\n\n".join(timeline) | ||||
|         return (template % (self.TOTAL_POSTS, tc, tl)) | ||||
| 
 | ||||
|     def paginate(self, template, tagcloud, timeline): | ||||
|         outfile = self.SUBDIR + "/%i.html" | ||||
|         timeline.reverse() # reorder from oldest to newest | ||||
|         for i in range(self.TOTAL_PAGES): | ||||
|             with open(outfile % i, 'w') as fout: | ||||
|                 prev = self.PPP * i | ||||
|                 curr = self.PPP * (i+1) | ||||
|                 sliced = timeline[prev:curr] | ||||
|                 sliced.reverse() | ||||
|                 fout.write( | ||||
|                     self.singlepage(template, tagcloud, sliced)) | ||||
|         pass | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     def get_args(): | ||||
|         argc = len(sys.argv) | ||||
| @ -147,7 +189,18 @@ if __name__ == "__main__": | ||||
|         tl, tc = make_timeline(content, email) | ||||
|         tcl    = make_tagcloud(tc) | ||||
|         count  = len(tl) | ||||
|         html = "" | ||||
|         with open(template,'r') as f: | ||||
|             html = f.read() | ||||
|             print(html % (count, "\n".join(tcl), "\n\n".join(tl))) | ||||
|             #print(html % (count, "\n".join(tcl), "\n\n".join(tl))) | ||||
|         count = len(tl) | ||||
|         posts_per_page = 5 | ||||
|         pagectrl = Paginator(count, posts_per_page) | ||||
|         if count <= posts_per_page: | ||||
|             print(pagectrl.paginate(html, tcl, timeline)) | ||||
|         else: | ||||
|             latest   = tl[:posts_per_page] | ||||
|             print(pagectrl.singlepage(html, tcl, latest)) | ||||
|             pagectrl.paginate(html, tcl, tl) | ||||
| 
 | ||||
|     main() | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user