Skip to main content

Company blogs as a service. Built for developers.

Project description

Why Butter?

Butter makes setting up a company blog on Django insanely easy. It’s built for Django developers to save us from hosting, DB setup, themeing, maintaining yet another Wordpress install. It’s designed to be quickly integrated to an existing Django project.

Butter provides a marketing friendly blogging UI, hosted on, and exposes blog content created via an API.

This package provides thin wrapper that interacts with the Butter API and a quick start blog application.


Requires Python 2.7.9 or newer. If you’re on an older version of 2.7 please take a few seconds to upgrade:

$ pip install buttercms-django
# In
# Add buttercms to INSTALLED_APPS

Grab your API token from

# In
BUTTER_CMS_TOKEN = '<your_api_token>'

Define your blog path

# In
# Add your new blog path
urlpatterns = patterns('',
    url(r'^blog/', include('buttercms.urls')),

Nice job. You’ve now got a blog running natively in your Django project. Nothing but Python goodness. (No PHP scripts here ;))

Check it out! http://localhost:8000/blog

Customize the Blog Template

We’ve provided a default theme but we expect you’ll want skin it with your branding so we’ve made this as simple as extending your base template.

First create a template file called blog.html that both extends your base template and your main content block.

{% extends "base.html" %}

{% block content %}
    {% for post in recent_posts %}
        <h2><a href="{{ post.url }}">{{ post.title }}</a></h2>
        <p>Posted by <a href="{% url 'blog_author' %}">{{ }} {{ }}</a> on {{ post.created }}</p>
        <p>{{ post.summary }}</p>
    {% endfor %}
{% endblock %}

Then add this template name to your

# In

Go to http://localhost:8000/blog and you’ll see your new professional branded blog!

If you don’t make sure you’re both extending the correct base template (the example assumes “base.html”) and implementing the correct block name (the example assumes {% block content %} is the name of your main body block between the header and footer).

Log into to start blogging!

Customize the Blog Post Template

Now that you’ve customized the Blog template, you can also do the same for the individual blog post template in the same fashion.

<!-- note it's important this template extends the variable name 'base_template' -->
{% extends base_template %}

{% block content %}
<div class="post-preview">
    <a href="{% url 'blog_post' post.slug %}">
      <h2 class="post-title">
          {{ post.title }}
    <p class="post-meta">Posted by <a href="{% url 'blog_author' %}">{{ }} {{ }}</a> on {{ post.created }}</p>
    <p class="post-subtitle">{{ post.body }}</p>
{% endblock %}

Then add this template name to your

# In

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

buttercms-django-0.2.5.tar.gz (6.8 kB view hashes)

Uploaded Source

Built Distribution

buttercms_django-0.2.5-py2.py3-none-any.whl (10.2 kB view hashes)

Uploaded Python 2 Python 3

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