Overhaul flatpages
* move contents of main.py to __init__.py * update documentation in README * change the key/value configuration specification * added a recipe for passing values from the url to the template * removed some unused code
This commit is contained in:
parent
8815541c26
commit
54b42ee564
@ -44,27 +44,24 @@ First, let's talk about the route.
|
|||||||
|
|
||||||
A route is a key/value in your configuration file.
|
A route is a key/value in your configuration file.
|
||||||
|
|
||||||
The key starts with ``path`` and then has a number after that. For
|
The key for the route is the route name You can use this with `url()`
|
||||||
example: ``path1``, ``path2``, ... ``path15``, ...
|
in templates to have MediaGoblin automatically build the urls for
|
||||||
|
you. It's very handy.
|
||||||
|
|
||||||
The value has three parts separated by commas:
|
It should be "unique" and it should be alphanumeric characters and
|
||||||
|
hyphens. I wouldn't put spaces in there.
|
||||||
|
|
||||||
1. **route name**: You can use this with `url()` in templates to have
|
Examples: ``flatpages-about``, ``about-view``, ``contact-view``, ...
|
||||||
MediaGoblin automatically build the urls for you. It's very handy.
|
|
||||||
|
|
||||||
It should be "unique" and it should be alphanumeric characters and
|
The value has two parts separated by commas:
|
||||||
hyphens. I wouldn't put spaces in there.
|
|
||||||
|
|
||||||
Examples: ``flatpages-about``, ``about-view``, ``contact-view``, ...
|
1. **route path**: This is the url that this route matches.
|
||||||
|
|
||||||
2. **route path**: This is the url that this route matches.
|
|
||||||
|
|
||||||
Examples: ``/about``, ``/contact``, ``/pages/about``, ...
|
Examples: ``/about``, ``/contact``, ``/pages/about``, ...
|
||||||
|
|
||||||
Technically, this is a regular expression and you can do anything
|
You can do anything with this that you can do with the routepath
|
||||||
with this that you can do with the routepath parameter of
|
parameter of `routes.Route`. For more details, see `the routes
|
||||||
`routes.Route`. For more details, see `the routes documentation
|
documentation <http://routes.readthedocs.org/en/latest/>`_.
|
||||||
<http://routes.readthedocs.org/en/latest/>`_.
|
|
||||||
|
|
||||||
Example: ``/siteadmin/{adminname:\w+}``
|
Example: ``/siteadmin/{adminname:\w+}``
|
||||||
|
|
||||||
@ -75,7 +72,7 @@ The value has three parts separated by commas:
|
|||||||
|
|
||||||
For example: ``'/siteadmin/{adminname:\w+}'``
|
For example: ``'/siteadmin/{adminname:\w+}'``
|
||||||
|
|
||||||
3. **template**: The template to use for this url. The template is in
|
2. **template**: The template to use for this url. The template is in
|
||||||
the flatpagesfile template directory, so you just need to specify
|
the flatpagesfile template directory, so you just need to specify
|
||||||
the file name.
|
the file name.
|
||||||
|
|
||||||
@ -89,8 +86,14 @@ Here's an example configuration that adds two flat pages: one for an
|
|||||||
"About this site" page and one for a "Terms of service" page::
|
"About this site" page and one for a "Terms of service" page::
|
||||||
|
|
||||||
[[mediagoblin.plugins.flatpagesfile]]
|
[[mediagoblin.plugins.flatpagesfile]]
|
||||||
page1 = about-view, '/about', about.html
|
about-view = '/about', about.html
|
||||||
page2 = terms-view, '/terms', terms.html
|
terms-view = '/terms', terms.html
|
||||||
|
|
||||||
|
|
||||||
|
.. Note::
|
||||||
|
|
||||||
|
The order in which you define the routes in the config file is the
|
||||||
|
order in which they're checked for incoming requests.
|
||||||
|
|
||||||
|
|
||||||
Templates
|
Templates
|
||||||
@ -130,3 +133,29 @@ template::
|
|||||||
another, take advantage of Jinja2 template extending and create a
|
another, take advantage of Jinja2 template extending and create a
|
||||||
base template that the others extend.
|
base template that the others extend.
|
||||||
|
|
||||||
|
|
||||||
|
Recipes
|
||||||
|
=======
|
||||||
|
|
||||||
|
Url variables
|
||||||
|
-------------
|
||||||
|
|
||||||
|
You can handle urls like ``/about/{name}`` and access the name that's
|
||||||
|
passed in in the template.
|
||||||
|
|
||||||
|
Sample route::
|
||||||
|
|
||||||
|
about-page = '/about/{name}', about.html
|
||||||
|
|
||||||
|
Sample template::
|
||||||
|
|
||||||
|
{% extends "flatpagesfile/base.html" %}
|
||||||
|
{% block mediagoblin_content %}
|
||||||
|
|
||||||
|
<h1>About page for {{ request.matchdict['name'] }}</h1>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
See the `the routes documentation
|
||||||
|
<http://routes.readthedocs.org/en/latest/>`_ for syntax details for
|
||||||
|
the route. Values will end up in the ``request.matchdict`` dict.
|
||||||
|
@ -15,6 +15,65 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
# This imports the main module which has the FlatPagesPlugin class
|
import logging
|
||||||
# which does all the work.
|
import os
|
||||||
import mediagoblin.plugins.flatpagesfile.main
|
|
||||||
|
import jinja2
|
||||||
|
from routes.route import Route
|
||||||
|
|
||||||
|
from mediagoblin.tools import pluginapi
|
||||||
|
from mediagoblin.tools.response import render_to_response
|
||||||
|
|
||||||
|
|
||||||
|
PLUGIN_DIR = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
|
||||||
|
_log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@jinja2.contextfunction
|
||||||
|
def print_context(c):
|
||||||
|
s = []
|
||||||
|
for key, val in c.items():
|
||||||
|
s.append('%s: %s' % (key, repr(val)))
|
||||||
|
return '\n'.join(s)
|
||||||
|
|
||||||
|
|
||||||
|
def flatpage_handler_builder(template):
|
||||||
|
"""Flatpage view generator
|
||||||
|
|
||||||
|
Given a template, generates the controller function for handling that
|
||||||
|
route.
|
||||||
|
|
||||||
|
"""
|
||||||
|
def _flatpage_handler_builder(request):
|
||||||
|
return render_to_response(
|
||||||
|
request, 'flatpagesfile/%s' % template,
|
||||||
|
{'request': request})
|
||||||
|
return _flatpage_handler_builder
|
||||||
|
|
||||||
|
|
||||||
|
class FlatpagesFilePlugin(pluginapi.Plugin):
|
||||||
|
"""
|
||||||
|
This is the flatpages plugin class. See the README for how to use
|
||||||
|
flatpages.
|
||||||
|
"""
|
||||||
|
def setup_plugin(self):
|
||||||
|
self.config = pluginapi.get_config('mediagoblin.plugins.flatpagesfile')
|
||||||
|
|
||||||
|
_log.info('Setting up flatpagesfile....')
|
||||||
|
|
||||||
|
# Register the template path.
|
||||||
|
pluginapi.register_template_path(os.path.join(PLUGIN_DIR, 'templates'))
|
||||||
|
|
||||||
|
pages = self.config.items()
|
||||||
|
|
||||||
|
routes = []
|
||||||
|
for name, (url, template) in pages:
|
||||||
|
name = 'flatpagesfile.%s' % name.strip()
|
||||||
|
controller = flatpage_handler_builder(template)
|
||||||
|
routes.append(
|
||||||
|
Route(name, url, controller=controller))
|
||||||
|
|
||||||
|
pluginapi.register_routes(routes)
|
||||||
|
_log.info('Done setting up flatpagesfile!')
|
||||||
|
@ -1,73 +0,0 @@
|
|||||||
# GNU MediaGoblin -- federated, autonomous media hosting
|
|
||||||
# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
import logging
|
|
||||||
import os
|
|
||||||
|
|
||||||
from routes.route import Route
|
|
||||||
|
|
||||||
from mediagoblin.tools import pluginapi
|
|
||||||
from mediagoblin.tools.response import render_to_response
|
|
||||||
|
|
||||||
|
|
||||||
PLUGIN_DIR = os.path.dirname(__file__)
|
|
||||||
|
|
||||||
|
|
||||||
_log = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
def flatpage_handler(template):
|
|
||||||
"""Flatpage view generator
|
|
||||||
|
|
||||||
Given a template, generates the controller function for handling that
|
|
||||||
route.
|
|
||||||
|
|
||||||
"""
|
|
||||||
def _flatpage_handler(request, *args, **kwargs):
|
|
||||||
return render_to_response(
|
|
||||||
request, 'flatpagesfile/%s' % template,
|
|
||||||
{'args': args, 'kwargs': kwargs})
|
|
||||||
return _flatpage_handler
|
|
||||||
|
|
||||||
|
|
||||||
class FlatpagesFilePlugin(pluginapi.Plugin):
|
|
||||||
"""
|
|
||||||
This is the flatpages plugin class. See the README for how to use
|
|
||||||
flatpages.
|
|
||||||
"""
|
|
||||||
def setup_plugin(self):
|
|
||||||
self.config = pluginapi.get_config('mediagoblin.plugins.flatpagesfile')
|
|
||||||
|
|
||||||
_log.info('Setting up flatpagesfile....')
|
|
||||||
|
|
||||||
# Register the template path.
|
|
||||||
pluginapi.register_template_path(os.path.join(PLUGIN_DIR, 'templates'))
|
|
||||||
|
|
||||||
# Set up and register routes.
|
|
||||||
pages = [(int(key.replace('page', '')), val)
|
|
||||||
for key, val in self.config.items()
|
|
||||||
if key.startswith('page')]
|
|
||||||
|
|
||||||
pages = [mapping for index, mapping in sorted(pages)]
|
|
||||||
routes = []
|
|
||||||
for name, url, template in pages:
|
|
||||||
name = 'flatpagesfile.%s' % name.strip()
|
|
||||||
controller = flatpage_handler(template)
|
|
||||||
routes.append(
|
|
||||||
Route(name, url, controller=controller))
|
|
||||||
|
|
||||||
pluginapi.register_routes(routes)
|
|
||||||
_log.info('Done setting up flatpagesfile!')
|
|
Loading…
x
Reference in New Issue
Block a user