Python/Django/Jinja2开发模式下Url QueryString的修改
2016-03-02 00:00
465 查看
urlhelper.py的代码,对于支持中文有两点需要注意:
使用parse_qs的时候,记得encode('utf-8')
添加或者更新qs的时候,记得encode('utf-8')
简单增加一个函数,用在jinja2的Template中。
注册jinja2的Enviroment,方便在Template中使用。
在Template中使用的方法。(通过返回self,实现Fluent API)
使用parse_qs的时候,记得encode('utf-8')
添加或者更新qs的时候,记得encode('utf-8')
#! -*- coding: utf-8 -*- from urllib import urlencode from urllib import quote from urlparse import parse_qs, urlsplit, urlunsplit class UrlQueryString(): def __init__(self, req): self.full_path = req.get_full_path() def replace(self, **kwargs): scheme, netloc, path, qs, fragment = urlsplit(self.full_path) qs_dict = parse_qs(qs.encode('utf-8')) # add kwargs to query string for k,v in kwargs.iteritems(): qs_dict[k] = v.encode('utf-8') if hasattr(v, 'encode') else v self.full_path = urlunsplit((scheme, netloc, path, urlencode(qs_dict, doseq=True), fragment)) return self def append(self, **kwargs): scheme, netloc, path, qs, fragment = urlsplit(self.full_path) qs_dict = parse_qs(qs.encode('utf-8')) # replace the querystring by the kwargs for k,v in kwargs.iteritems(): v = v.encode('utf-8') if hasattr(v, 'encode') else v if k in qs_dict.keys(): if isinstance(qs_dict[k], list): qs_dict[k].append(v) else: qs_dict[k] = [qs_dict[k], v] qs_dict[k] = list(set(qs_dict[k])) else: qs_dict[k] = v self.full_path = urlunsplit((scheme, netloc, path, urlencode(qs_dict, doseq=True), fragment)) return self def __unicode__(self): return self.full_path if __name__ == '__main__': pass
简单增加一个函数,用在jinja2的Template中。
def&nbs 3ff0 p;url_qs(req): return UrlQueryString(req)
注册jinja2的Enviroment,方便在Template中使用。
from __future__ import absolute_import # Python 2 only from jinja2 import Environment from jinja2 import evalcontextfilter, Markup, escape from PortalSite.urlhelper import UrlQueryString from PortalSite.urlhelper import url_qs def environment(**options): env = Environment(**options) env.filters['rdprofile'] = rdprofile env.filters['rduser'] = rdcentre_user env.filters['pinyin'] = pinyin_full_and_initial env.globals.update({ 'url_qs': url_qs, 'url': reverse, }) return env
在Template中使用的方法。(通过返回self,实现Fluent API)
<div class="table-div-right table-div-right-sm"> {% for sheet in datasets %} <a href="{{url_qs(request).append(sheet=sheet).replace(count=1)}}"> <span class="label label-primary">{{sheet}}</span> </a> {% endfor %} </div>
相关文章推荐
- java-用HttpURLConnection发送Http请求.
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例