A Django app drop in replacement for django.contrib.flatpages with drf support and metatag support.
Project description
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
-
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)
-
run
pip install django-betterFlatPages
-
Add 'betterFlatPages' to your INSTALLED_APPS setting.
-
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')), ]
-
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
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
File details
Details for the file django-betterFlatPages-1.2.2.tar.gz
.
File metadata
- Download URL: django-betterFlatPages-1.2.2.tar.gz
- Upload date:
- Size: 23.2 kB
- Tags: Source
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cfa710e99e9548e078ff2762b1c7d95c02b5850ee4042864accb8acb568b594c |
|
MD5 | cd5a1e02046615353b529ab5590f811d |
|
BLAKE2b-256 | 25bbaa4837883388b6133cb771151b367a04bc99a380edf2974635b70e15214e |