Archive for the 'Hello World' Category

令人头大的正则

Posted by Danfi on 2011-06-28 2 条评论

最近项目中需要解析填写的个别excel公式,无奈需用正则来获取,MAX,ROUND,IF尝试下还好,但是由于有些参

数是用字符串来代替,然后取值再替换的。在替换时问题就出现了,起初使用的字符串的replace方法,可惜它会替

换掉所有包含该字符串的内容,但项目中有几个命名是类似的这就导致提前替换而使后面的替换不能成功。用正则

的/b方法在编辑器下尝试是能够找到整个单词并且不会匹配包含它的字符串,但是不管怎么尝试,在shell中或者程

序中都不能匹配,那个真叫火大。搜索良久,才找到线索,python中/b回被转换成回退符,有两种方法可以解决此

类问题。1.多加一个反斜杠,例如:’\\bDanfi\\b’。2.用raw字符串,例如:r’\bDanfi\b’。不学则已,一学伤到底!

Django用templatetags处理列表动态数据

Posted by Danfi on 2011-01-20 添加评论

以django例子里最常见的Books和Author为例,假设有Book和Author两张表。
models.py

  1. ...
  2. class Author(models.Model):
  3.        name = models.CharField(_('Author Name'),max_length=128)
  4.       
  5.        def __unicode__(self):
  6.              return self.name
  7.               
  8. class Books(models.Model):
  9.        title = models.CharField(_('Books'),max_length=128)
  10.        author = models.Foreignkey(Author, related_name='book_author')
  11.       
  12.        def __unicode__(self):
  13.              return self.title
  14. ...

如上述代码所示,假设每本书有一个作者,且名字唯一,然后我们对作者进行列表处理。

阅读全文…

Jquery学习之multiselect

Posted by Danfi on 2011-01-04 6 条评论

初学jquery不久,由于程序中对员工字段用到multiselect,试想如果员工人数不断增加那么以后选取比较困难,于是就

想办法对所有员工按部门进行筛选,在选取部门后用change事件对multiselect中的未选值进行处理。在这个问题上,我

用了两种方法,第一次想到的是按views内传来的列表数据(用的django)与未选数据逐个进行比较,如果value不相等

则remove当前的未选项,此方法需要嵌套的for循环或者each方法。在每次change时首先触发全部未选的click事件,让

数据重置,不然views传来的数据为空时就会以前一条数据作为结果。此方法遇到个问题,按全选项会把所有项都选进去

而非过滤好的数据。那是因为全选和全不选都是相对于所有option的。所以就用到第二种方法:在change事件之前,保

存所有option,触发change后清除所有option,然后按views里传来的数据,逐条append。于是得到新的option组,再

触发全部未选按钮的click事件,就生成了过滤好的未选项。

Django学习之related_name

Posted by Danfi on 2010-12-15 添加评论

当一张表中外键指向同一个表的字段数大于等于2时,就得使用related_name,在最近的几次学习中发现,

related_name没有想象中那么简单,原本以为只是用于区分(不好好看文档的结果),结果在一次使用formsets

的过程中发现了问题,不管添加了多少子表单,form-TOTAL_FORMS恒不变, prefix后面跟的值永远是NAN,

细心的话就能发现firebug内显示的prefix与自己定义的明显不同,最后在主管的帮助下,问题渐渐明了,我在外键

内定义了related_name,该项就是firebug内显示的prefix,之后在使用反向查询时又出了问题,在Django Doc

里其实有句话说明了这个问题,

http://docs.djangoproject.com/en/dev/topics/db/queries/#many-to-many-relationships

Like ForeignKeyManyToManyField can specify related_name. In the above example, if the ManyToManyField

in Entry had specified related_name='entries', then each Author instance would have an entries attribute

instead of entry_set.

当定义了related_name后”_set”这类查询就被related_name代替了,所以用”_set”会报错。

Django Template 过滤

Posted by Danfi on 2010-10-25 添加评论

{{ name | lower }} 小写

{{ my_text|escape|linebreaks }} 先转义文本到HTML,再转换每行到标签

{{ bio | truncatewords:”30″ }}显示前30个字

{{content|striptags}} 纯文本格式

{{ pub_date | date:”F j, Y” }}

{{ 123|add:”5″ }} 给value加上一个数值

{{ “AB’CD”|addslashes }} 单引号加上转义号,一般用于输出到javascript中

{{ “abcd”|capfirst }} 第一个字母大写

{{ “abcd”|center:”50″ }} 输出指定长度的字符串,并把值对中

{{ “123spam456spam789″|cut:”spam” }} 查找删除指定字符串

{{ value|date:”F j, Y” }} 格式化日期

{{ value|default:”(N/A)” }} 值不存在,使用指定值

阅读全文…

Django缩略图

Posted by Danfi on 2010-07-13 2 条评论
  1. from PIL import Image
  2.  
  3. class Article(models.Model):
  4.   ...
  5.   photo = models.ImageField(upload_to='static/upload')      //图片路径
  6.     
  7.     def save(self):
  8.         if not self.id and not self.photo:
  9.             return
  10.         super(Article, self).save()
  11.         pw = self.photo.width                                    //取原图大小
  12.         ph = self.photo.height
  13.         filename = str(self.photo.url)
  14.         basename, format = filename.rsplit('.', 1)
  15.         miniature = basename + '_thumb'  + '.' +  format       //生成缩略图名
  16.         image = Image.open(filename)
  17.         if pw > 1000 or ph > 1000:             //根据大小设置缩小比率
  18.             p1 = float(pw) / 3
  19.             p2 = float(ph) / 3
  20.         elif (pw > 600 and pw<=1000) or ( ph > 600 and ph <= 1000):
  21.             p1 = float(pw) / 2
  22.             p2 = float(ph) / 2
  23.         else:
  24.             p1 = pw
  25.             p2 = ph
  26.         image = image.resize((p1, p2), Image.ANTIALIAS)
  27.         image.save(miniature)