I am currently writing a few custom template tags but for some reason they will not load. My directory structure is as follows:
MyProj
|
----MyApp
|
|----templatetags
|
|----myapp_tags.py
|----__init__.py
In myapp_tags.py
from django.template import Library, Node
from myproj.myapp.models import Product
register = Library()
class LatestProductsNode(Node):
def render(self, context):
context['recent_products'] = Product.objects.all()[:5]
return ''
def get_latest_products(parser, token):
return LatestProductsNode()
get_latest_products = register.tag(get_latest_products)
In settings.py
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'myproj.myapp',
)
In the Template
{% load myapp_tags %}
The error i get when trying to load the page:
Exception Type: TemplateSyntaxError Exception Value:
'myapp_tags' is not a valid tag library: Could not load template library from django.templatetags.myapp_tags, No module named myapp_tags
One thing that's tripped me up is that the magic importing of templatetags bypasses the automatic reloading of the development server. If the following works in
manage.py shell
Then everything is actually working and you just need to reload the development server. If on the other hand you get an
ImportError
then something is wrong and you should check yourINSTALLED_APPS
, that you have an __init__.py file in the templatetags directory and all the other things suggested in the other answers.This will probably only apply to a tiny fraction of the people who experience template tag loading problems, but this is the second time I've arrived at this question in as many weeks and both times it's just taken restarting the development server to get things working.
Some reasons:
For #2, for example. If you are doing:
This will go wrong, so instead above, you should do
It worked me this way.
The problem is that
nyapp_tags
is not at the top level of an installed project. If you putmyproj.myapp.templatetags
inINSTALLED_APPS
, you should be fine.in settings.py, you should never name the project 'myproj' explicitely. In
INSTALLED_APPS
, just use 'myapp'. Also, you should have this :And be sure to have an
__init__.py
in themyapp
folder as well as intemplatetags
.Use
manage.py shell
thenfrom myapp.templatetags import myapp_tags
to find out if theres any python error in the myapp_tags.py file.Also, be sure that myapp_tags.py file name doesnt conflicts with another folder/file in your project.
Hope this helps.