django-tagging的使用方法
一 7, 2009 编程
django使用app机制来实现组件的重用,充分的利用已有的app可以极大的简化开发工作。目前django下的app虽然还不够丰富,却也还是有部分不错的。django-tagging就是一个不错的app。
现在tag的应用非常广泛,tag基本上成了各网站的必备项目之一,django-tagging就是一个提供tag功能的app。django-tagging提供的功能非常丰富,使用起来却十分简单。下面我就介绍一些常用的用法,让大家对该app有个基本的了解,更详细的介绍还是老老实实的去看django-tagging的使用说明吧:)。
tagging.fields.TagField
我们先定义一个数据库模型Widget,下面的范例都用Widget来进行说明
class Widget(models.Model): name = models.CharField(max_length=50) tags = TagField()
就如上面的代码,只要在数据库模型中增加tags字段就可以为该对象提供tag支持了。tags被映射为CharField,在为对象添加tag时为,英文逗号分割的字符串如:
Widget(name='hello', tags='test,hi,hello')
这样就为新建立的对象添加了test hi hello三个tag了。
获取某个tag下的所有对象的代码如下:
#取出所有属于TAG hi的对象 tag = get_object_or_404(Tag, name='hi') widgets = TaggedItem.objects.get_by_model(Widget, tag)
如要取出Widget用到的所有tag的代码为:
tags = Widget.tags.all()
Tags: django, django-tagging
整了个在线将reStructuredText转成html的东西
一 5, 2009 vicalloy的庄家
现在不少python程序都是用reStructuredText写文档。
比较郁闷的是有部分文档都只提供了reStructuredText的源文件,没有转换好的html文件。
感觉自己每次手动转比较麻烦,于是花了点时间写了个在线的。
将reStructuredText文件贴进去,提交后就可以看到转好的页面了。
现在还有点问题,sphinx对reStructuredText进行了扩展。
对包含了sphinx标签的会处理出错(谁知道怎么忽略错误?)。
地址是 http://rest.haoluobo.com/
程序的代码可是非常的少,主要代码就是下面几行。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from django.http import HttpResponse
from docutils.core import publish_string
def index(request):
html = """
<html>
<head></head>
<body>
<form action="" method="post">
<textarea name="rest" cols="60" rows="20" onfocus="this.value=”"></textarea>
<br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
"""
if request.POST:
html = publish_string(request.POST['rest'], writer_name=’html’)
return HttpResponse(html)
Tags: python, reST, reStructuredText
提升pystardict对stardict字典文件的加载速度
一 2, 2009 编程
stardict是linux下使用最广的字段程序,在广大网友的贡献下,stardict的字典文件可是相当的丰富。pystardict是一个读取startdict字典文件的python库。
前些天在邮件列表看到有人提到用pystardict加载stardict的字典文件速度慢的问题。加载字段文件时需要解析字段的索引文件(.idx)取出所有的单词信息。但python未提供指针,处理速度远比不上c。
我尝试用正则表达式对索引解析部分的代码进行重写,经测试,速度应当能提高3/5的样子。感觉依旧不是太理想,不知道是否还有什么别的办法。
我将改动后的代码生成了一个patch发给pystardict的作者,不知道是否会被采用。
下面是idx解析的关键代码(idx的结构确实是非常的简单):
1 2 3 4 5 6 7 8 9 10 | import re rawstr = r"""([\d\D]+?\x00[\d\D]{8})""" matchstr = self._file match_obj = re.findall(rawstr, matchstr) for e in match_obj: c = e.find('\x00') record_tuple = unpack('!%sc1x%sL' % (c, idx_offset_format), e) word, cords = ''.join(record_tuple[:c]), record_tuple[c:] self._idx[word] = cords |
后记
今天收到原作者的邮件,我提交的patch已经接收了,新的pystardict已经更新过。不过他用的是我早些提交的patch。那个patch里,我unpack的时候没有做跳过\x00的处理,所以要稍微丑点。
Tags: pystardict, python, stardict