Skip to main content

A library to load data from database to template

Project description

Django Template Data

Why?

You are working on a Django project and you want a way to update some strings or blocks without using a bare CMS or a WYSIWYG. Then this small module is for you. It does what you expect, load datas from database and send them via the context to the templates.

Installation

$ pip install git+https://github.com/jefcolbi/django-template-data.git

Usage

Add 'template_data' in INSTALLED_APPS

INSTALLED_APPS = [
    ...,
    'template_data',
    ...,
]

Then add load_data() to templates context processors

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'debug': True,
            'context_processors': [
                ...,
                'template_data.processors.load_data',
            ],
        },
    },
]

Finally migrate

$ python manage.py migrate

Tutorial

Let say you want a dynamic title, loaded from the database. First create a base template like this:

{% load i18n %}
<!doctype html>
<html lang="en">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="shortcut icon" href="/static/front/img/favicon.png" type="image/x-icon">
    {% block full_title %}<title>{% block title %}{{ title }}{% endblock %} - Sitename</title>{% endblock %}

...

Go to your Django admin to manage TemplateData model. Create two rows, with these values:
key = "title", page = "index", value = "Home"
key = "title", page = "signin", value = "Login in your account"
As you can imagine the title of the index page will be "Home - Sitename" and for the signin page will be "Login in your account - Sitename"

You surely noticed how we appended "- Sitename" to the title in the template. We can do the same by using the inheriting feature.
First we define this template:

{% load i18n %}
<!doctype html>
<html lang="en">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="shortcut icon" href="/static/front/img/favicon.png" type="image/x-icon">
    <title>{% block title %}{{ title }}{% endblock %}</title>

...

Then create three rows of TemplateData with these values:
key = "title", page = "global", value = "Sitename"
key = "title", page = "index", inheriting_page = "global", value = "Home - {{ super }}"
key = "title", page = "signin", inheriting_page = "global", value = "Login in your account - {{ super }}"
You will have the same result.

Internalization

You can also add the lang attribute for multilingualism, but for this to work you need to set the LANGUAGE variables in your project settings.

{% load i18n %}
<!doctype html>
<html lang="en">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="shortcut icon" href="/static/front/img/favicon.png" type="image/x-icon">
    {% block full_title %}<title>{% block title %}{{ title }}{% endblock %} - Sitename</title>{% endblock %}

...

Go to your Django admin to manage TemplateData model. Create two rows, with these values:
key = "title", page = "signin", lang = english, value = "Login in your account"

key = "title", page = "signin", lang = french, value = "Connexion a votre compte"

As you can imagine the title of the signin page will be "Login in your account - Sitename" if browser language is in english and "Connexion a votre compte - Sitename" if french

Restore data

After saving in bd all the texts, use the commandpython manage.py save_data file_name.json to save all that in a json file.

To restore these data in your database use python manage.py restore_data file_name.json

Template rewriting

Edit

Template rewriting is a feature provided to re-write existing templates to conform with Django Template Data.

Start by editing your templates and add the attribute tpl-data-key in the tags you want to create template data for.
For example, if you have a h2 tag like this
<h2>My custom title</h2>

you can edit it like this
<h2 tpl-data-key="title">My custom title</h2>

It will be rewritten in
<h2>{{ title }}</h2>

and a new template data entry will be added in database.

You can inform about the tag's text language by using tpl-data-lang like
<h2 tpl-data-key="title" tpl-data-lang="en">My custom title</h2>
to inform that your text is in English.

Process

After you have edited your templates files run the django command rewrite_template
Examples:

To rewrite all the templates linked to your views, do:
python manage.py rewrite_template --views

To rewrite a single base template file, do:
python manage.py rewrite_template --file=core/base.html

To rewrite a single template file, do:
python manage.py rewrite_template --file=core/index.html --pagename=index

Contributing

Contributions are welcome. It is FOSS!

License

Feel free to use it as you want.

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

django-template-data-0.1.1.tar.gz (11.3 kB view hashes)

Uploaded Source

Built Distribution

django_template_data-0.1.1-py2.py3-none-any.whl (14.3 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