分类: 系统运维
2011-12-15 18:18:40
tmpl_context, TG 控制器不仅是页面的渲染器,同时承担着json的接口工作,把view-specific放到tmpl_context以及把model-data放到结果字典中,可以让我们更容易的使用json查询
@validate 使用sprox widget/form的自动生成器转化输入到python对象并检查需要的字段,
@validate(form=add_movie_form,error_handle=index,), 这里error_handle定义了当错误发生时控制器调用的方式
需要from sprox.formbase import AddRecordForm
一个类定义
class AddMovie(AddRecordForm):
__model__ = Movie
add_movie_form = AddMovie(DBSession)
传递参数给模板
tmpl_context.add_movie_form = add_movie_form
在模板中加入
${tmpl_context.add_movie_form( action='add_movie') }
设置add_movie方法
@validate(form=add_movie_form, error_handler=index,)
def add_movie( self, title, description, year, genre, **named ):
"""Create a new movie record"""
new = Movie(
title = title,
description = description,
year = year,
reviewed = False,
genre_id = genre,)
DBSession.add( new )
flash( '''Added movie: %s'''%( title, ))
redirect( './index' )
下拉框
在窗体中定义
genre_options = [x for x in enumerate((
'Action & Adventure', 'Animation', 'Comedy',
'Documentary', 'Drama', 'Sci-Fi & Fantasy'))]
genre = SingleSelectField(options=genre_options)
如果想从数据库中获取下拉框的数据,则修改如下:
修改root.py中页面的返回
原先:
return dict(modelname='Movie', value=kw)
修改后:
return dict(modelname='Movie',genre_options=model.DBSession.query(model.MovieGenera.id, model.MovieGenera.title),page='ToscaSample New Movie')
修改模板文件
原先: