Showing posts with label django. Show all posts
Showing posts with label django. Show all posts

Apr 12, 2008

Using Django besides Web Applications

I read an article about using Django in command-linse scripts.

It is about using the Django model APIs and settings in ex-web python scripts.
By using this method, we can use the same API in batch scripts with heavy proccesses, like parsing huge XML files, and converting movie file types.

SQLObjects was the only choicse for me before reading this article, so I am happy to know about this method.

Using the new Django Paginator with page links

I have made a Customized Page class for the new Django Paginator.
It shows page links with "prev", "next" buttons.


utils.py

import string
from django.core.paginator import Page, InvalidPage

class BetterPage(Page):
def __init__(self, page, link_template):
self.link_template = link_template
Page.__init__(self, page.object_list, page.number, page.paginator)

def previous_link(self):
if self.has_previous():
tpl = string.Template(self.link_template)
return tpl.safe_substitute({"page": self.number - 1})
else:
return None

def next_link(self):
if self.has_next():
tpl = string.Template(self.link_template)
return tpl.safe_substitute({"page": self.number + 1})
else:
return None

def make_page_links(self, start, end):
tpl = string.Template(self.link_template)
return [(p+1, tpl.safe_substitute({"page": p + 1}), (p+1 == self.number)) for p in range(start, end)]

def page_links(self):
return self.make_page_links(0, self.paginator.num_pages)

def windowed_page_links(self, window_size=5):
links = []
if self.paginator.num_pages <= window_size: links = [self.page_links()] elif self.number - window_size/2 <= 3: links = [self.make_page_links(0, window_size), self.make_page_links(self.paginator.num_pages-2, self.paginator.num_pages)] elif self.number + window_size/2 > self.paginator.num_pages - 2:
links = [self.make_page_links(0, 2), self.make_page_links(self.paginator.num_pages-window_size, self.paginator.num_pages)]
else:
links = [self.make_page_links(0, 2),
self.make_page_links(self.number-window_size/2-1, self.number+window_size/2-1),
self.make_page_links(self.paginator.num_pages-2, self.paginator.num_pages)]
return links