Skip to main content

django-betterFlatPages

This django app is a drop in replacement for django.contrib.flatpages. The main new features that django-betterFlatPages offers as of now is the optional django-rest-framework views and a spot to add metadata. Any contribution is welcome just make a pull request, and I will try to add your feature in the next version as soon as possible.

Installation

  1. prerequisites

    • sites framework (django.contrib.sites) - make sure you have the site id set
    • django-rest-framework (not required unless you want to use betterFlatPages rest api)
  2. run pip install django-betterFlatPages

  3. Add 'betterFlatPages' to your INSTALLED_APPS setting.

  4. Add urls (only add the urls file that you plan on using)

    rest api urls

    urlpatterns = [ path('api/pages/', include('betterFlatPages.DRF_urls')), ]

    normal urls file

    urlpatterns = [ path('pages/', include('betterFlatPages.urls')), ]

  5. Run the command manage.py migrate.

using the rest api

to use the rest api django-rest-framework must be installed

to get the page in the rest api add the url at the end of api/pages/

if the flatPage url is /policy/ then it would be `/api/pages/policy/'

the response would look something like

{
    "url": "/policy/",
    "title": "privacy policy",
    "content": "this is the privacy policy",
    "enable_comments": false,
    "meta": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"
}

using custom templates

By default, flatpages are rendered via the template betterFlatPages/default.html, but you can override that for a particular flatpage: in the admin, a collapsed fieldset titled “Advanced options” (clicking will expand it) contains a field for specifying a template name. If you’re creating a flat page via the Python API you can set the template name as the field template_name on the FlatPage object. (as per the django documentation)

Flatpage templates are passed a single context variable, flatpage, which is the flatpage object.

here is the current default.html

{% extends 'betterFlatPages/base.html' %}
{% block head_title %}{{ flatpage.title }}{% endblock %}

{% block extra_head %}{{ flatpage.meta | safe}}{% endblock %}

{% block content %}
<div class="bg-white p-5 rounded">
    <h1 class="text-center">{{ flatpage.title }}</h1>
    {{ flatpage.content | safe }}
</div>
{% endblock %}

using metatags

you can add meta-tags in the admin in “Advanced options" dropdown

add the meta options with the full tag just like it would be in html

<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="product" content="cool product">
<meta name="etc" content="etc...">

to render the tags on your template page add

<head>
    ...
    {{ flatpage.meta | safe}}
    ...
</head>

extending and overriding the template

visit: https://docs.djangoproject.com/en/4.0/howto/overriding-templates/

still left to do

  • create a management command to copy all the django.contrib.flatpages pages to better flat pages (and possibly the reverse)
  • amazing documentation
  • 100% testing coverage
  • create a replacement middleware similar to django.contrib.flatpages.middleware.FlatpageFallbackMiddleware
  • add any new features django.contrib.flatpages is lacking
  • add all the features that django.contrib.flatpages has
    • template tags
    • integration with django sitemaps
    • use marksafe before rendering template so user doesn't have to use the | safe filter

Metadata

Release files for django-betterFlatPages 1.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-betterFlatPages 1.2.2
File Size Uploaded
django-betterFlatPages-1.2.2.tar.gz 23.2 kB Details

Release files / django-betterFlatPages-1.2.2.tar.gz

Download URL django-betterFlatPages-1.2.2.tar.gz
Size 23.2 kB
Tags Source
SHA-256 checksum
How to use checksums
cfa710e99e9548e078ff2762b1c7d95c02b5850ee4042864accb8acb568b594c
BLAKE2b-256 checksum
How to use checksums
25bbaa4837883388b6133cb771151b367a04bc99a380edf2974635b70e15214e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.7.1 importlib_metadata/4.9.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

Release history Release notifications | RSS feed

This release

1.2.2 This release

1 release file

1.2.1

1 release file

1.2.0

1 release file

1.0.1

1 release file

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page