分类:'DJango' 的所有文章

Bluehost上架设Django之Admin

Bluehost上面架设Django的过程见这篇文章:Bluehost Django fastcgi配置, 静态(static)文件处理

架好以后,最近做代码发芽网才发现Admin界面是裸的 - 没有css。

分析了一下,应该是Admin_media之类的没有设置好。Google了一下Dreamhost Django Admin(为什么不是Bluehost而是Dreamhost?因为他们很相似,但是Dreamhost的wiki明显优于Bluehost的论坛),找到这一篇:
http://wiki.dreamhost.com/index.php/Django
里面说,做一下ln -s就行了
我的是这样设置的(根据你自己的Django media文件夹位置进行调整):

settings.py:
MEDIA_ROOT = '/home/twomaom1/django/django-trunk/django/contrib/admin/media'
ADMIN_MEDIA_PREFIX = '/admin_media/'

然后到命令行下:

ln -s /home/twomaom1/django/django-trunk/django/contrib/admin/media /home/twomaom1/public_html/fayaa/admin_media

搞定!

顺便改了所有的model,加上Admin,美化了一下下,Django的Admin就是好用啊。

代码发芽网(Beta版,在线代码语法高亮)发布,欢迎测试、试用

在线代码语法高亮,支持多个主题,可直接复制粘贴高亮代码到各个网站、blog主流编辑器
已知的支持列表(不完全):
百度空间
csdn发帖
wordpress默认编辑器以及其主流编辑器
微软Office、Outlook
Google Gmail以及Google文档
163邮箱
等等等等,还有许多没有写在这里的

发芽网主页:http://www.fayaa.com/,目前只有“代码发芽网”一个子站点,将会发布更多
代码发芽网主页:http://www.fayaa.com/code/

基于python + Django + pygments,断断续续写了快要半年了,终于可以发布beta版了。



代码发芽网:
聚沙成塔,水滴石穿,积少成多,绳锯木断

您是否曾经有过这些经历
o 发现了很好的代码,保存后再也找不到?用邮件发一段代码,被抱怨说格式很乱?
o 发代码段给朋友时,没有彩色语法高亮?或者,复制粘贴以后却依然是白底黑字?

该站特色:

代码的版本管理与更新记录, 近百种编程语言的语法高亮, 看代码简单高效
动态切换语法高亮主题配色, 加色后的代码可以复制粘贴, 粘贴后依然高亮

点击此处进入代码发芽网

简单的使用实例:
打开这篇文章: http://www.fayaa.com/code/view/20/
然后选择代码,复制,在blog后台粘贴如下(行号可以在复制前去掉)
01 #人性化的时间:2008-01-27 08:37:29
02 #发芽网使用此函数来显示人性化的时间:比如1分钟以前,三天前,等等
03 def time_span(ts):
04    delta = datetime.now() - ts
05    if delta.days >= 365:
06        return %d年前’ % (delta.days / 365)
07    elif delta.days >= 30:
08        return %d个月前’ % (delta.days / 30)
09    elif delta.days > 0:
10        return %d天前’ % delta.days
11    elif delta.seconds < 60:
12        return %d秒前” % delta.seconds
13    elif delta.seconds < 60 * 60:
14        return %d分钟前” % (delta.seconds / 60)
15    else:
16        return %d小时前” % (delta.seconds / 60 / 60)

2008-05-25更新:
修正了代码行数过长引起行号混乱的bug
隐藏了Feedback页面的IP地址的最后一位
缩小了代码的字体
搞定了用户页面最后一页时的异常

2008-05-27更新:
修正了用户注册时用户名重复的问题

2008-05-28更新:
调整了配色方案和代码发芽网首页
修正了一个站内搜索的问题
新增了支持复制粘贴到Discuz!论坛的功能。

2008-05-30更新:
调整了行号切换方案,参见:代码发芽网显示代码时做行号切换的javascript脚本
完善了用户信息编辑
对界面颜色进行了一些微调
添加了给作者发信的功能(附加验证码)

2008-06-25更新:
这段时间其实都有更新,主要内容如下:
1. 评论里面的代码缩进没问题了
2. 界面进行了更多的调整,让字体配色显得更加舒服
3. 支持受限制的Discuz论坛发帖了,虽然有限,但有总比没有好
4. 加入了直接复制代码的按钮
5. 用户可以编辑自己的用户信息了
6. 切换行号以后复制粘贴不会再把行号包括进来
7. 加入了“给用户发信”功能
8. 把表情图片改小了一些,看起来更加协调
9. 发临时贴不需要填标题了

Bluehost上面搞定Mysql utf-8配置, for Django

1、在后台控制面板里面建立一个数据库,先别急着做manage.py syncdb
2、到phpMyAdmin里面,在左边的列表中选中这个数据库
3、然后在右面那一行tab按钮中点击“操作”(Operations,那个带“工具箱图标”的tab)
4、打开新页面后在最下面Collation处选择utf8_general_ci,点击”Go”按钮

好了,现在你可以manage.py syncdb了,新生成的表都是utf-8编码,不会有数据库编码的问题了

BTW:
另外一个不爽的事情是bluehost上面没有jpeglib以及freetype2,所以前面做的那个Captcha不能直接在bluehost上用,我改了一下,用的是“聊胜于无”的default font,字体小,所以我在生成网页的时候做了一下放缩(指定width和height)

javascript href=”#”页面滚动到顶端的问题

写网页免不了要写javascript,比如这样:点我啊,上顶端,可以试试向下滚屏(用滚轮或者方向键)以后再点击这个链接看看效果)

<a href="#" onclick="alert('点我干啥子?')">点我啊,上顶端</a>

这样的方式有个问题是:如果真的点了,整个浏览页面会滚动到顶端。有时候需要(比如Ajax)点击以后页面不滚动

解决方式很简单,return false就行了:点我啊,我不跑

<a href="#" onclick="alert('点我干啥子?');return false">点我啊,我不跑</a>

当你return false的时候,浏览器忽略href

my paginate function for DJango

感觉DJango的分页浏览不是很好用,需要先查出来再搞分页。
由于很常用,所以我自己写了个函数mypaginate(注意我的分页格式很固定,用”&page=2″这种方式)

在view中这样调用

PAGE_SIZE = 10 #每页十个
params = "&keywords=%s&code_lang=%s" % (keywords, lang) #页面链接时候的额外参数
offset, page_navi, page_ex = mypaginate(request, total, PAGE_SIZE, params)

然后由render传给模板,模板中这么写

{% if page_ex.prev %}
<a href="{{page_ex.first}}">第一页</a>
<a href="{{page_ex.prev}}">上一页</a>
{% else %}
第一页 上一页
{% endif %}
{% for p, l in page_navi %}
<a id="p_{{p}}" href="/code/all/{{l}}">{{p}}</a>
{% endfor %}
{% if page_ex.max_page %}
...
<a href="{{page_ex.last}}">{{page_ex.max_page}}</a>
{% endif %}
{% if page_ex.next %}
<a href="{{page_ex.next}}">下一页</a>
<a href="{{page_ex.last}}">最后页</a>
{% else %}
下一页 最后页
{% endif %}

mypaginate函数源码

def mypaginate(request, total, pagesize, params=""):
    
#get page info
    
curr = int(request.GET.get('page', 1))
    
#calculate the offset
    
offset = (curr - 1) * pagesize
    
if offset >= total:
        
offset = total - 1
    
if offset < 0:
        
offset = 0
    
#paginatize
    
page_navi = []
    
page_ex = {}
    
max_page = (total - 1) / pagesize + 1
    
start = curr - curr % 10 + 1
    
end = start + 10
    
if end > max_page + 1:
        
end = max_page + 1 #remember it's [start, end)
    
else:
        
page_ex['max_page'] = max_page
 
    
for i in range(start, end):
        
link = ("?page=%d&" % i) + params
        
page_navi.append((i, link))
    
if curr > 1:
        
page_ex['first'] = ("?page=%d" % 1) + params
        
page_ex['prev'] = ("?page=%d" % (curr - 1)) + params
    
if curr < max_page:
        
page_ex['next'] = ("?page=%d" % (curr + 1)) + params
        
page_ex['last'] = ("?page=%d" % max_page) + params
 
    
return (offset, page_navi, page_ex)

下一页 »