summaryrefslogtreecommitdiff
path: root/repoze/bfg/sampleapp
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-07-14 18:27:19 +0000
committerChris McDonough <chrism@agendaless.com>2008-07-14 18:27:19 +0000
commited334fdfefcdfdc570cfcd42aff171b177b76240 (patch)
treee716196772096510a99f8445945f97c4af78680c /repoze/bfg/sampleapp
parentbaf2406e1999160ad5d96e3adbeb525502a6d98b (diff)
downloadpyramid-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.zcml18
-rw-r--r--repoze/bfg/sampleapp/templates/blog.pt6
-rw-r--r--repoze/bfg/sampleapp/templates/blog_entry.pt6
-rw-r--r--repoze/bfg/sampleapp/templates/blog_entry_add.pt15
-rw-r--r--repoze/bfg/sampleapp/views.py97
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)