Load a Django template tag library for all views by default

DjangoDjango Templates

Django Problem Overview


I have a small typography related templatetag library that I use on almost every page. Right now I need to load it for each template using

{% load nbsp %}

Is there a way to load it "globally" for all views and templates at once? Putting the load tag into a base template doesn't work.

Django Solutions


Solution 1 - Django

There is an add_to_builtins method in django.template.loader. Just pass it the name of your templatetags module (as a string).

from django.template.loader import add_to_builtins

add_to_builtins('myapp.templatetags.mytagslib')

Now mytagslib is available automatically in any template.

Solution 2 - Django

It will change with Django 1.9 release.

Since 1.9, correct approach will be configuring template tags and filters under builtins key of OPTIONS - see the example below:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'builtins': ['myapp.builtins'],
        },
    },
]

Details: https://docs.djangoproject.com/en/dev/releases/1.9/#django-template-base-add-to-builtins-is-removed

Solution 3 - Django

In django 1.7 just replace for from django.template.base import add_to_builtins

Solution 4 - Django

In Django 1.9 there is an libraries dictionary of labels and dotted Python paths of template tag modules to register with the template engine. This can be used to add new libraries or provide alternate labels for existing ones.

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
		    'context_processors': [
	            'django.template.context_processors.debug',
	            'django.template.context_processors.request',
	            'django.contrib.auth.context_processors.auth',
	            'django.contrib.messages.context_processors.messages',
	        ],
	        'libraries': { # Adding this section should work around the issue.
	            'custom_tags' : 'myapp.templatetags.custom_tags',#to add new tags module.
	            'i18n' : 'myapp.templatetags.custom_i18n', #to replace exsiting tags modile
	        },
        },
    },
]

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTomas AndrleView Question on Stackoverflow
Solution 1 - DjangoDaniel RosemanView Answer on Stackoverflow
Solution 2 - DjangopbajsarowiczView Answer on Stackoverflow
Solution 3 - DjangobsaoView Answer on Stackoverflow
Solution 4 - DjangokartheekView Answer on Stackoverflow