Skip to content
This repository
Fetching contributors…

Cannot retrieve contributors at this time

file 56 lines (40 sloc) 2.009 kb

Developing on Bedrock

Writing URL Patterns

URL patterns should be as strict as possible. It should begin with a ^ and end with /$ to make sure it only matches what you specifiy. It also forces a trailing slash. You should also give the URL a name so that other pages can reference it instead of hardcoding the URL. Example:

url(r'^channel/$', channel, name='mozorg.channel')

Bedrock comes with a handy shortcut to automate all of this:

from mozorg.util import page
page('channel', 'mozorg/channel.html')

You don't even need to create a view. It will serve up the specified template at the given URL (the first parameter). You can also pass template data as keyword arguments:

page('channel', 'mozorg/channel.html', latest_firefox=product_details.LATEST_FIREFOX)

The variable latest_firefox will be available in the template.

Writing Views

You should rarely need to write a view for mozilla.org. Most pages are static and you should use the page expression documented above.

If you need to write a view and the page has a newsletter signup form in the footer (most do), make sure to handle this in your view. Bedrock comes with a function for doing this automatically:

from mozorg.util import handle_newsletter
from session_csrf import anonymous_csrf

@anonymous_csrf
def view(request):
    ctx = handle_newsletter(request)
    return l10n_utils.render(request, 'app/template.html', ctx)

You'll notice a few other things in there. You should use the l10n_utils.render function to render templates because it handles special l10n work for us. Since we're handling the newsletter form post, you also need the anonymous_csrf decorator.

Make sure to namespace your templates by putting them in a directory named after your app, so instead of templates/template.html they would be in templates/blog/template.html if blog was the name of your app.

Something went wrong with that request. Please try again.