37. SQLALCHEMY + URL DISPATCH WIKI TUTORIAL
10from .models import (
11DBSession,
12Page,
13)
14
15# regular expression used to find WikiWords
16wikiwords = re.compile(r"\b([A-Z]\w+[A-Z]+\w+)")
17
18@view_config(route_name=’view_wiki’)
19def view_wiki(request):
20return HTTPFound(location = request.route_url(’view_page’,
21 |
pagename=’FrontPage’)) |
22
23@view_config(route_name=’view_page’, renderer=’templates/view.pt’)
24def view_page(request):
25pagename = request.matchdict[’pagename’]
26page = DBSession.query(Page).filter_by(name=pagename).first()
27if page is None:
28return HTTPNotFound(’No such page’)
29
30def check(match):
31word = match.group(1)
32exists = DBSession.query(Page).filter_by(name=word).all()
33if exists:
34 |
view_url = request.route_url(’view_page’, pagename=word) |
35return ’<a href="%s">%s</a>’ % (view_url, word)
36else:
37 |
add_url = request.route_url(’add_page’, pagename=word) |
38 |
return ’<a href="%s">%s</a>’ % (add_url, word) |
39
40content = publish_parts(page.data, writer_name=’html’)[’html_body’]
41content = wikiwords.sub(check, content)
42edit_url = request.route_url(’edit_page’, pagename=pagename)
43return dict(page=page, content=content, edit_url=edit_url)
44
45@view_config(route_name=’add_page’, renderer=’templates/edit.pt’)
46def add_page(request):
47name = request.matchdict[’pagename’]
48if ’form.submitted’ in request.params:
49body = request.params[’body’]
50page = Page(name, body)
51DBSession.add(page)
52return HTTPFound(location = request.route_url(’view_page’,
54save_url = request.route_url(’add_page’, pagename=name)
55page = Page(’’, ’’)