关于分页视图中使用分页栏google很多文章,讲到的方法中,如果地址栏中有 ?a=1 这样的querystring,那么就很不好办,这里自己写了个tag来处理了下,没这个问题了
bs 下,django的template太烂的,解决这么个简单问题还需要写那么长个tag,实在不爽中。。。
tag如下:
#app_xx/templatetags/add_page_to_path_tag.py
from django.template import Library, Node, TemplateSyntaxError
from urlparse import urlparse, urlunparse
import re
register = Library()
class AddPageToPathNode(Node):
def __init__(self, request, page):
self._request = request.encode()
self._page = page.encode()
def render(self, context):
self.full_path = context[self._request].get_full_path()
if self._page == 'first':
self.page = 1
elif self._page == 'last':
self.page = context['pages']
else:
self.page = context[self._page]
url = urlparse(self.full_path)
r1 = re.compile(r"\?")
r2 = re.compile(r"page=\d+")
if r1.search(self.full_path):
if r2.search(self.full_path):
return r2.sub('page=%s' % self.page, urlunparse(url))
else:
return "%s&page=%s" % (self.full_path, self.page)
else:
return "%s?page=%s" % (self.full_path, self.page)
def add_page_to_path(parser, token):
tokens = token.split_contents()
if len(tokens) < 3:
raise TemplateSyntaxError(u"'%r' tag requires at least 2 arguments." % tokens[0])
return AddPageToPathNode(tokens[1], tokens[2])
register.tag('add_page_to_path', add_page_to_path)
template中使用如下:
#app_xx/templates/include/paginate.html
{% load add_page_to_path_tag %}
<div style="text-align:right; padding-right: 20px">
{% if is_paginated %}
{% ifequal page 1 %}
首页
{% else %}
<a href="{% add_page_to_path request first %}">首页</a>
{% endifequal %}
{% if has_previous %}
<a href="{% add_page_to_path request previous %}">上一页</a>
{% else %}
上一页
{% endif %}
{% if has_next %}
<a href="{% add_page_to_path request next %}">下一页</a>
{% else %}
下一页
{% endif %}
{% ifequal page pages %}
末页
{% else %}
<a href="{% add_page_to_path request pages %}">末页</a>
{% endifequal %}
当前页:{{ page }}/{{ pages }}
{% endif %}
</div>
bs 下,django的template太烂的,解决这么个简单问题还需要写那么长个tag,实在不爽中。。。
tag如下:
#app_xx/templatetags/add_page_to_path_tag.py
from django.template import Library, Node, TemplateSyntaxError
from urlparse import urlparse, urlunparse
import re
register = Library()
class AddPageToPathNode(Node):
def __init__(self, request, page):
self._request = request.encode()
self._page = page.encode()
def render(self, context):
self.full_path = context[self._request].get_full_path()
if self._page == 'first':
self.page = 1
elif self._page == 'last':
self.page = context['pages']
else:
self.page = context[self._page]
url = urlparse(self.full_path)
r1 = re.compile(r"\?")
r2 = re.compile(r"page=\d+")
if r1.search(self.full_path):
if r2.search(self.full_path):
return r2.sub('page=%s' % self.page, urlunparse(url))
else:
return "%s&page=%s" % (self.full_path, self.page)
else:
return "%s?page=%s" % (self.full_path, self.page)
def add_page_to_path(parser, token):
tokens = token.split_contents()
if len(tokens) < 3:
raise TemplateSyntaxError(u"'%r' tag requires at least 2 arguments." % tokens[0])
return AddPageToPathNode(tokens[1], tokens[2])
register.tag('add_page_to_path', add_page_to_path)
template中使用如下:
#app_xx/templates/include/paginate.html
{% load add_page_to_path_tag %}
<div style="text-align:right; padding-right: 20px">
{% if is_paginated %}
{% ifequal page 1 %}
首页
{% else %}
<a href="{% add_page_to_path request first %}">首页</a>
{% endifequal %}
{% if has_previous %}
<a href="{% add_page_to_path request previous %}">上一页</a>
{% else %}
上一页
{% endif %}
{% if has_next %}
<a href="{% add_page_to_path request next %}">下一页</a>
{% else %}
下一页
{% endif %}
{% ifequal page pages %}
末页
{% else %}
<a href="{% add_page_to_path request pages %}">末页</a>
{% endifequal %}
当前页:{{ page }}/{{ pages }}
{% endif %}
</div>
网友评论(1):
胡阳
2012/01/13 11:20
过来学习了
Pages: 1/1
1
1


