diff options
| author | Chris McDonough <chrism@agendaless.com> | 2008-07-14 18:27:19 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2008-07-14 18:27:19 +0000 |
| commit | ed334fdfefcdfdc570cfcd42aff171b177b76240 (patch) | |
| tree | e716196772096510a99f8445945f97c4af78680c /repoze/bfg/sampleapp | |
| parent | baf2406e1999160ad5d96e3adbeb525502a6d98b (diff) | |
| download | pyramid-ed334fdfefcdfdc570cfcd42aff171b177b76240.tar.gz pyramid-ed334fdfefcdfdc570cfcd42aff171b177b76240.tar.bz2 pyramid-ed334fdfefcdfdc570cfcd42aff171b177b76240.zip | |
Render templates explicitly in views.
Diffstat (limited to 'repoze/bfg/sampleapp')
| -rw-r--r-- | repoze/bfg/sampleapp/configure.zcml | 18 | ||||
| -rw-r--r-- | repoze/bfg/sampleapp/templates/blog.pt | 6 | ||||
| -rw-r--r-- | repoze/bfg/sampleapp/templates/blog_entry.pt | 6 | ||||
| -rw-r--r-- | repoze/bfg/sampleapp/templates/blog_entry_add.pt | 15 | ||||
| -rw-r--r-- | repoze/bfg/sampleapp/views.py | 97 |
5 files changed, 80 insertions, 62 deletions
diff --git a/repoze/bfg/sampleapp/configure.zcml b/repoze/bfg/sampleapp/configure.zcml index 5e7a83ffd..e026a12f2 100644 --- a/repoze/bfg/sampleapp/configure.zcml +++ b/repoze/bfg/sampleapp/configure.zcml @@ -7,39 +7,29 @@ <!-- the default view for a Blog --> <bfg:view for=".models.IBlog" - factory=".views.BlogDefaultView" - template="templates/blog.pt" + factory=".views.blog_default_view" permission="repoze.view" /> <!-- the default view for a BlogEntry --> <bfg:view for=".models.IBlogEntry" - factory=".views.BlogEntryDefaultView" - template="templates/blog_entry.pt" + factory=".views.blog_entry_default_view" permission="repoze.view" /> <!-- the add template for a BlogEntry --> <bfg:view for=".models.IBlog" - template="templates/blog_entry_add.pt" + factory=".views.blog_entry_add_view" name="add_entry.html" permission="repoze.view" /> - <!-- the add handler for a BlogEntry --> - <bfg:view - for=".models.IBlog" - factory=".views.BlogEntryAddView" - permission="repoze.view" - name="add_entry_handler" - /> - <!-- the contents view for any mapping (shows dict members) --> <bfg:view for=".models.IMapping" - template="templates/contents.pt" + factory=".views.contents_view" name="contents.html" permission="repoze.view" /> diff --git a/repoze/bfg/sampleapp/templates/blog.pt b/repoze/bfg/sampleapp/templates/blog.pt index 8ccbe56a2..8eb3945db 100644 --- a/repoze/bfg/sampleapp/templates/blog.pt +++ b/repoze/bfg/sampleapp/templates/blog.pt @@ -1,15 +1,15 @@ <html xmlns="http://www.w3.org/1999/xhtml" xmlns:tal="http://xml.zope.org/namespaces/tal"> <head></head> -<body tal:define="info view.getInfo()"> - <h1 tal:content="info.name">Blog Name</h1> +<body> + <h1 tal:content="name">Blog Name</h1> <table border="0"> <thead> <th>Title</th> <th>Author</th> <th>Created</th> </thead> - <tr tal:repeat="entry info.entries"> + <tr tal:repeat="entry entries"> <td><a href="${entry.name}/">${entry.title}</a></td> <td>${entry.author}</td> <td>${entry.created}</td> diff --git a/repoze/bfg/sampleapp/templates/blog_entry.pt b/repoze/bfg/sampleapp/templates/blog_entry.pt index 20e1b4409..830876525 100644 --- a/repoze/bfg/sampleapp/templates/blog_entry.pt +++ b/repoze/bfg/sampleapp/templates/blog_entry.pt @@ -2,10 +2,10 @@ xmlns:tal="http://xml.zope.org/namespaces/tal"> <head></head> <body> - <div tal:define="info view.getInfo()"> + <div> <p><a href="..">Up</a></p> - <h1>${info.title}</h1> - <p>by ${info.author}</p> + <h1>${title}</h1> + <p>by ${author}</p> <div tal:content="structure info.body"></div> </div> </body> diff --git a/repoze/bfg/sampleapp/templates/blog_entry_add.pt b/repoze/bfg/sampleapp/templates/blog_entry_add.pt index b41ae4b02..101163b44 100644 --- a/repoze/bfg/sampleapp/templates/blog_entry_add.pt +++ b/repoze/bfg/sampleapp/templates/blog_entry_add.pt @@ -1,24 +1,27 @@ <html xmlns="http://www.w3.org/1999/xhtml" xmlns:tal="http://xml.zope.org/namespaces/tal"> -<head></head> +<head> +</head> <body> - <form action="add_entry_handler" method="POST"> + <form action="${request.path_url}" method="POST"> + <h2 tal:condition="message" tal:content="message"></h2> <h1>Add a blog entry</h1> <table border="0"> <tr> <th>Title</th> - <td><input type="text" name="title"/></td> + <td><input type="text" name="title"/>${title}</td> </tr> <tr> <th>Author</th> - <td><input type="text" name="author"/></td> + <td><input type="text" name="author"/>${author}</td> </tr> <tr> <th>Body</th> - <td><textarea name="body" rows="10" value=""> </textarea></td> + <td><textarea name="body" rows="10" cols="80"> ${body}</textarea + ></td> </tr> <tr> - <td><input type="submit" name="add" value="Add"/></td> + <td><input type="submit" name="form.submitted" value="Add"/></td> </tr> </table> </form> diff --git a/repoze/bfg/sampleapp/views.py b/repoze/bfg/sampleapp/views.py index 196fce703..8e2ddd467 100644 --- a/repoze/bfg/sampleapp/views.py +++ b/repoze/bfg/sampleapp/views.py @@ -1,49 +1,74 @@ +import formencode import time from webob.exc import HTTPFound -from repoze.bfg.view import TemplateView -from repoze.bfg.view import View - +from repoze.bfg.template import render_template from repoze.bfg.sampleapp.models import BlogEntry def datestring(dt): return dt.strftime('%Y-%m-%d %H:%M:%S') -class BlogDefaultView(TemplateView): - - def getInfo(self): - entrydata = [] - for name, entry in self.context.items(): - entrydata.append( - { - 'name':name, - 'title':entry.title, - 'author':entry.author, - 'created':datestring(entry.created), - } - ) - return {'name':self.context.__name__, 'entries':entrydata} - -class BlogEntryDefaultView(TemplateView): - - def getInfo(self): - return { - 'name':self.context.__name__, - 'title':self.context.title, - 'body':self.context.body, - 'author':self.context.author, - 'created':datestring(self.context.created), +def blog_default_view(context, request): + entrydata = [] + for name, entry in self.context.items(): + entrydata.append( + { + 'name':name, + 'title':entry.title, + 'author':entry.author, + 'created':datestring(entry.created), + 'message':self.request.params.get('message'), } + ) + + info = {'name':self.context.__name__, entries:entrydata} + return render_template('templates/blog.pt', info) + +def blog_entry_default_view(context, request): + info = { + 'name':self.context.__name__, + 'title':self.context.title, + 'body':self.context.body, + 'author':self.context.author, + 'created':datestring(self.context.created), + } + return render_template('templates/blog_entry.pt', **info) + +class BlogAddSchema(formencode.Schema): + allow_extra_fields = True + author = formencode.validators.NotEmpty() + body = formencode.validators.NotEmpty() + title = formencode.validators.NotEmpty() + +def blog_entry_add_view(context, request): + params = self.request.params + + message = None -class BlogEntryAddView(View): + author = params.get('author', '') + body = params.get('body', '') + title = params.get('title', '') + info = dict(request=self.request, + author=author, body=body, title=title, message=None) - def __call__(self): - author = self.request.params['author'] - body = self.request.params['body'] - title = self.request.params['title'] - name = str(time.time()) - new_entry = BlogEntry(name, title, body, author) - self.context[name] = new_entry - return HTTPFound(location='/') + if params.has_key('form.submitted'): + schema = BlogAddSchema() + try: + form = schema.to_python(params) + except formencode.validators.Invalid, why: + message = str(why) + info['message'] = message + else: + author = form['author'] + body = form['body'] + title = form['title'] + name = str(time.time()) + new_entry = BlogEntry(name, title, body, author) + self.context[name] = new_entry + return HTTPFound(location='/') + else: + return render_template('templates/blog_entry_add.pt', **info) +def contents_view(context, request): + return render_template('templates/contents.pt', context=context) |
