Micolog升级默认版本Django 0.96至Django1.2

最近GAE一直遇到问题,不是database超额,就是micolog版本过旧,新版GAE不予支持,搜索到升级micolog Django0.96至1.2版的方法,对方网站却已注销,国内又无法查看Google Cache,于是乎,将方法迁移过来,转给需要的朋友,大家分享。

最近一段时间GAE后台log总是出现这个:

You are using the default Django version (0.96). The default Django version will change in an App Engine release in the near future. Please call use_library() to explicitly select a Django version. For more information see http://code.google.com/appengine/docs/python/tools/libraries.html#Django

看来Google是打算抛弃0.96版本的Django了,最新的1.4.3版本SDK已经内置了1.2版本的Django。自己的博客使用的是 Micolog0.74版本,由于自己修改过大量的源码,而且现在GAE被墙,估计Micolog的使用者会减少很多,Micolog的作者徐明看来也没 有下个版本的开发计划,于是就自己动手,将Micolog的默认0.96Django版本升级到Django1.2吧。

以下是升级步骤,注意,我使用截止写这篇博文时最新的0.74版本Micolog为例。顺便再AD下,micolog真是一款不错的博客系统,就0.74版本而言,我想要的功能都有了。

友情提醒:升级有风险,请先备份代码O(∩_∩)O~修改代码时请注意python中缩进非常重要,修改或添加代码请不要改变原代码的缩进,如果你对python不太了解,尽量使用默认的编辑器IDLE进行修改

1.复制根目录下filter.py文件至app目录下,分别修改blog.py和admin.py文件:

将 webapp.template.register_template_library(‘filter’) 修改为 webapp.template.register_template_library(‘app.filter’)

说明:1.2版本的Django对处理register_template_library(模块名)时,模块不能是xxx而必须是xxx.xxx这样的形式(这个我自己也有点说不太清楚,呵呵)

2.修改settings.py文件,在import os下一行添加如下代码(下面这段代码称之为代码段一,下文不再赘述,需要添加同样代码直接引用’代码段一’)

os.environ[‘DJANGO_SETTINGS_MODULE’] = ‘settings’
from google.appengine.dist import use_library
use_library(‘django’, ‘1.2’)

3.同样,在admin.py文件import cgi, os,sys,traceback,logging下一行添加代码段一

4.在blog.py文件import cgi, os,sys,math下一行添加代码段一

说明:2-4步按照google的说明,明确引用1.2版本Django

5.base.py第384行(应该348行)代码 path = os.path.join(self.blog.rootdir, template_file) 修改为 path = os.path.join(os.path.dirname(__file__), template_file)

6.micolog_template.py文件 修改第49行代码 from django import v0_96 为 from django import v1_2

7.分别在model.py和admin.py文件的第15行添加这行代码from django.utils.translation import ugettext as _

说明:第七步的修改是因为经过以上修改后系统会报错 global name ‘_’ is not defined 这与Django的多语言支持有关。

以上步骤修改源码,下面的步骤开始修改后台管理员界面模板文件

8.这一步比较繁琐,请仔细阅读后修改。

修改views/admin 目录下所有html文件,确保文件的第一行是{% extends “base.html” %}

细致步骤:

(1)setup_base.html比较特殊不需要任何修改,事实上这个文件在经过下面的修改后就无用了

(1)html文件以{% extends “base.html” %}或{% load i18n %}开头,则该文件不做任何修改。不需要修改的文件有三个,分别是 upload.html 、404.html 、base.html、error.html(还有这个文件)

(2)html文件若以 {% load i18n %}{% extends “base.html” %}  这样的两行代码开头,则将这两行调换位置 修改为{% extends “base.html” %}{% load i18n %}

(3)html文件以{% load i18n %}{% extends “setup_base.html” %}这样的两行代码开头(有4个这样的文件,分别是setup.html、import.html、sitemap.html、tools.html)

a、分别将这四个文件的{% load i18n %}{% extends “setup_base.html” %}这两行代码修改为{% extends “base.html” %}{% load i18n %}

b、将setup_base.html文件中的这些代码(代码段二)

{% block nav2 %}
<div id=”dnav2″>
<ul>{% block nav2_1 %}
<li><a href=”/admin/setup”>{%trans “Basic” %}</a></li>
<li><a href=”/admin/import”>{%trans “Import/Export” %}</a></li>
<li><a href=”/admin/sitemap”>{%trans “Sitemap” %}</a></li>
<li><a href=”/admin/tools”>{%trans “Tools” %}</a></li>{% endblock %}
{%for menu in self.blog.plugins.get_setupmenu %}
<li><a href=”{{menu.url}}” {%ifequal m_id menu.m_id%}class=”current”{%endifequal%} >{{menu.title}}</a></li>
{%endfor%}
</ul>
<div style=”clear:both”></div>
</div>
{% endblock %}

用代码段二替换这四个文件中的如下代码

{% block nav2_1 %}
<li><a href=”/admin/setup” >{%trans “Basic” %}</a></li>
<li><a href=”/admin/import”>{%trans “Import/Export” %}</a></li>
<li><a href=”/admin/sitemap”>{%trans “Sitemap” %}</a></li>
<li><a href=”/admin/tools”>{%trans “Tools” %}</a></li>
{% endblock%}

说明:Django1.2要求模板文件如需继承base.html则必须以{% extends “base.html” %}开头

9.OK。经过这些步骤后,Micolog的Django就升级到了1.2版本,烦人的log再也不会出现了。需要 注意的是,升级后后台语言会变为英文,如果你想让显示中文的话,只需要将settings.py中第10行的代码##LANGUAGE_CODE = ‘zh-CN’去掉其注释就可以了-> LANGUAGE_CODE = ‘zh-CN’

已知Bug:

1.后台导入导出功能不可用,暂未找到出错原因

2.sys_plugin插件不可使用,原因暂且不明

除了这两个原因暂不明的BUG外,经我试用未有其他明显bug 。这里提供一个经过以上步骤修改过的版本(原始版本为Micolog0.74,可以下载使用(该下载链接已损坏,这是我修改后上传的micolog0.74,水平有限,欢迎指正。我将不定期发布修复bug后的版本。期待徐明能继续坚持开发Micolog吧,把Micolog完善的更好。

2011-04-03 Update : 需要注意的是,Django1.0版本以后模板引擎系统默认开启了自动转义Html,这样就会导致文章或菜单栏显示出Html源码来,解决的办法是将模板 中不需要自动转义的标签(例如{{entry.content}}等)添加一个safe过滤器,就像这样{{entry.content|safe}} 。如果你对此不清楚,建议阅读这篇文章《Django 模板语言》。这是需要在模板中修改的,所以提供的修改版本中并无这样的修改,请根据自己使用模板的情况就行相应的修改。建议Micolog的主题制作者为兼容下个版本的Django在制作主题时都能添加上这个safe过滤器。

2011-04-05 Update: 第7步,需要在blog.py中也添加添加这行代码from django.utils.translation import ugettext as _

转载自: Micolog升级默认0.96版本Django至Django1.2

分享到

一条评论

  1. 新用户091971说道:

    真的你为什么写怎么这么多。

评论已关闭。