Blueprint example app #413

Merged
merged 2 commits into from Jun 25, 2012
@@ -0,0 +1,11 @@
+from flask import Flask
+from simple_page.simple_page import simple_page
+
+app = Flask(__name__)
+app.register_blueprint(simple_page)
+# Blueprint can be registered many times
+app.register_blueprint(simple_page, url_prefix='/pages')
+
+
+if __name__ == '__main__':
+ app.run(debug=True)
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+"""
+ Blueprint Example Tests
+ ~~~~~~~~~~~~~~
+
+ Tests the Blueprint example app
+"""
+import blueprintexample
+import unittest
+
+
+class BlueprintExampleTestCase(unittest.TestCase):
+
+ def setUp(self):
+ self.app = blueprintexample.app.test_client()
+
+ def test_urls(self):
+ r = self.app.get('/')
+ self.assertEquals(r.status_code, 200)
+
+ r = self.app.get('/hello')
+ self.assertEquals(r.status_code, 200)
+
+ r = self.app.get('/world')
+ self.assertEquals(r.status_code, 200)
+
+ #second blueprint instance
+ r = self.app.get('/pages/hello')
+ self.assertEquals(r.status_code, 200)
+
+ r = self.app.get('/pages/world')
+ self.assertEquals(r.status_code, 200)
+
+
+if __name__ == '__main__':
+ unittest.main()
@@ -0,0 +1,13 @@
+from flask import Blueprint, render_template, abort
+from jinja2 import TemplateNotFound
+
+simple_page = Blueprint('simple_page', __name__,
+ template_folder='templates')
+
+@simple_page.route('/', defaults={'page': 'index'})
+@simple_page.route('/<page>')
+def show(page):
+ try:
+ return render_template('pages/%s.html' % page)
+ except TemplateNotFound:
+ abort(404)
@@ -0,0 +1,5 @@
+{% extends "pages/layout.html" %}
+
+{% block body %}
+ Hello
+{% endblock %}
@@ -0,0 +1,5 @@
+{% extends "pages/layout.html" %}
+
+{% block body %}
+ Blueprint example page
+{% endblock %}
@@ -0,0 +1,25 @@
+<!doctype html>
+<title>Simple Page Blueprint</title>
+<div class=page>
+ <h1>This is blueprint example</h1>
+ <p>
+ A simple page blueprint is registered under / and /pages<br/>
+ you can access it using this urls:
+ <ul>
+ <li><a href="{{ url_for('simple_page.show', page='hello') }}">/hello</a></li>
+ <li><a href="{{ url_for('simple_page.show', page='world') }}">/world</a></li>
+ </ul>
+ </p>
+ <p>
+ Also you can register the same blueprint under another path
+ <ul>
+ <li><a href="/pages/hello">/pages/hello</a></li>
+ <li><a href="/pages/world">/pages/world</a></li>
+ </ul>
+ </p>
+
+
+
+ {% block body %}
+ {% endblock %}
+</div>
@@ -0,0 +1,5 @@
+{% extends "pages/layout.html" %}
+
+{% block body %}
+ World
+{% endblock %}