09年8月1日工作记录
3.视图将一个机遇Pinax的项目移植到一个基于Satchmo的项目中。
1.SVN提交,冲突,resolve conflict.
2.在Ubuntu下配置MySQL等一系列软件,很方便。
安装MySQL
软件包管理器,安装:python-mysqldb, phpmyadmin, mysql-server-5.0。
phpmyadmin的地址: http://localhost/phpmyadmin/
对已有项目的整合
接到的任务是将另一个coder的sns项目代码迁移到我们的代码中。
对已有项目的修改
一个文件夹包含所有apps。
修改settings.py。
修改urls.py,添加一行。
基本没有影响原有的代码。
修改views, models, forms文件中的import问题
主要是import的错误。
总结一个关于import好习惯:
把从django import的东西和从自己code中import的东西明确地分离开。一旦遇到问题需要修改的时候,比较方便。
依赖tagging app
ImportError: No module named tagging.models
freshfanatic.apps_sns.share_recipe.models.py
依赖于Pinax 的 tagging app。
将这个app添加到settings里应该就可以了。但是这回连服务器都启动不了了:
No module named tagging.managers
由于服务器都没有启动起来,推测错误出在__init__里,果然,第二句:
from tagging.managers import ModelTaggedItemManager, TagDescriptor
可见,错误在于 tagging app 没有在Python path 上。
卡住,如果采用easy_install的方法安装 django-tagging 的话,这个问题就可以解决。
但是这同时意味着项目多了一个依赖,也意味着所有成员如果不安装tagging 就会启动不了服务器……思考中……
暂时注释掉settings里的tagging就可以进入Django的shell了:
fruitschen@fruitschen-desktop:~/workspace/freshfanatic$ python manage.py shell
……
(InteractiveConsole)
>>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
['/home/fruitschen/workspace/freshfanatic',
'/usr/local/lib/python2.6/dist-packages/pycrypto-2.0.1-py2.6-linux-i686.egg',
……
'/usr/local/lib/python2.6/dist-packages']
看来Django项目的路径和普通的Python程序相比,path相差不大。只是多出了一个项目根目录。
思路:可以利用settings.py的路径,加上相对路径获得tagging app 的路径,添加到sys.path里。shell测试:
>>> import settings
>>> settings.__file__
'/home/fruitschen/workspace/freshfanatic/settings.py'
>>> import os
>>> home = os.path.dirname(settings.__file__)
>>> home
'/home/fruitschen/workspace/freshfanatic'
>>> s = os.path.join(home,'apps_sns')
>>> s
'/home/fruitschen/workspace/freshfanatic/apps_sns'
>>> sys.path.insert(0,s)
>>> pprint.pprint(sys.path)
['/home/fruitschen/workspace/freshfanatic/apps_sns',
……
]
>>>
以上省略若干错误。
实践,修改apps_sns/__init__.py,添加如下内容:
import settings
import os
import sys
home = os.path.dirname(settings.__file__)
s = os.path.join(home,'apps_sns')
sys.path.insert(0,s)
修改settings.py加上之前注释掉的 taggin app,重启服务器,一切正常。
syncdb,没有问题。
浏览/localhost:8000/sns/,可以看到sns项目的主页,但是所有的媒体文件都没有显示,查看服务器终端的信息:
[01/Aug/2009 03:32:17] "GET /sns/images/big_nav_logout_normal.gif HTTP/1.1" 404 3256
查看homepage的view,模板为 loginjoin.html。
查看loginjoin.html,所有的媒体文件采用的都是 "css/style.css" 形式的相对路径。
个人认为应该采用"{{ Media_URL }}/css/style.css", 至少在以后修改的时候会灵活一点。
小收获
测试了一下,修改模板采用{{ Media_URL }}之后仍然访问不到文件。从FireBug的结果看来,应该是 Media_URL 的值为 None。
搜索了一下,在模板中使用 Media_URL 的条件有好几个,以前一直都没有注意到:
1。在settings.py 中定义了 Media_URL。(这个是当然的)
2。django.core.context_processors.media 是激活的,在默认的Django 项目中,这个是激活的。
不过查了一下,我们项目的setttings还真就把这项给关闭了。
3。使用了RequestContext。
SVN提交
再次修改冲突。
Over of the day.