Skip to main content

betahaus.viewcomponent

Project description

Reusable components in web pages make them a lot more fun and rewarding to write. The goal of this package is to make them easy to add, remove and change. While it’s usable in a regular webapp, it’s probably more interesting to use in something that others will extend or change, like a framework.

It’s written to be flexible and easy to adapt, rather than being the perfect solution to everything.

Another example - building a menu

So you have a webapp, and you want a menu somewhere. And then package X, Y and Z works as plugins, but how do they add to that menu of yours? (Read the Pyramid docs on how to create views)

First, let’s create minimal Python view code:

from betahaus.viewcomponent import render_view_group
from pyramid.view import view_config
@view_config(renderer = 'some/template.pt')
def main_template(context, request):
    return dict(render_view_group = render_view_group)

And then the template: (Yes, this is a very small app :)

<html>
  <body>
    <ul>render_view_group(context, request, 'menu')</ul>
  </body>
</html>

The menu will be simple html strings, a <li> for each statement. To return them, we need decorated methods. Note that the ViewGroup menu will be created as soon as it’s populated. (the first argument in the decorator)

from betahaus.viewcomponent import view_action
@view_action('menu', 'login')
def login_link(context, request, va):
    return "<li><a href="/login">Login</a></li>"
@view_action('menu', 'logout')
def logout_link(context, request, va):
    return "<li><a href="/logout">Logout</a></li>"
@view_action('menu', 'my_personal_stuff', permission = 'ViewStuff')
def personal_link(context, request, va):
    """ This will only render if user has permission 'ViewStuff'"""
    return "<li><a href="/my-stuff">My stuff</a></li>"

After your app has been started, you’ll have a menu now. Also, other apps may add to it the same way, or remove your initial alternatives.

Feedback and features

The source code of the package is really small, and it should be commented enough so it’s easy to pick up what to do with it. The package is still under development, but used on several production servers today.

If you have suggestions, criticism, feedback, ideas - please don’t hesitate to contact me or add an issue at GitHub.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

betahaus.viewcomponent-0.1b.tar.gz (11.1 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page