Reputation: 8951
I've created a custom tag that I want to use, but Django can't seem to find it. My templatetags
directory is set up like this:
pygmentize.py
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from django import template
from pygments.formatters.other import NullFormatter
register = template.Library()
@register.tag(name='code')
def do_code(parser,token):
code = token.split_contents()[-1]
nodelist = parser.parse(('endcode',))
parser.delete_first_token()
return CodeNode(code,nodelist)
class CodeNode(template.Node):
def __init__(self,lang,code):
self.lang = lang
self.nodelist = code
def render(self,context):
code = self.nodelist.render(context)
lexer = get_lexer_by_name('python')
return highlight(code,lexer,NullFormatter())
I am trying to use this tag to render code in gameprofile.html
.
gameprofile.html
(% load pygmentize %}
{% block content %}
<title>{% block title %} | {{ game.title }}{% endblock %}</title>
<div id="gamecodecontainer">
{% code %}
{{game.code}}
{% endcode %}
</div>
{% endblock content %}
When I navigate to gameprofile.html
, I get an error:
Invalid block tag on line 23: 'code', expected 'endblock'. Did you forget to register or load this tag?
Upvotes: 28
Views: 163468
Reputation: 11
Remember {% your code %} is different from { % your code % } check the spaces before the bracket the brackets
Upvotes: 0
Reputation: 25
Sometimes all you need is to just:
or
Upvotes: 0
Reputation: 51
Encountered this same issue but I just added {% load static %}
from my extends template and it worked. So in your case if you're trying to load gameprofile.html
from a base template you just need to add it like this:
{% extends 'some_base.html' %}
{% block content %}
{% load pygmentize %}
Upvotes: 5
Reputation: 1122
For Django 2.2 up to 3, you have to load staticfiles in html template first before use static keyword
{% load staticfiles %}
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
For other versions use static
{% load static %}
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
Also you have to check that you defined STATIC_URL in setting.py
At last, make sure the static files exist in the defined folder
Upvotes: 25
Reputation: 111
{% load static %}
<img src="{% static "my_app/example.jpg" %}" alt="My image">
in your templates, use the static template tag to build the URL for the given relative path using the configured STATICFILES_STORAGE
.
Upvotes: 11
Reputation: 2188
{% load static %}
Please add this template tag on top of the HTML or base HTML file
Upvotes: 7
Reputation: 1
In gameprofile.html
please change the tag {% endblock content %}
to {% endblock %}
then it works otherwise django will not load the endblock and give error.
Upvotes: 0
Reputation: 1867
I had the same problem, here's how I solved it. Following the first section of this very excellent Django tutorial, I did the following:
python manage.py startapp new_app
settings.py
file, adding the following to the list of INSTALLED_APPS
: 'new_app',
new_app
package named new_app_tags
.{% extends 'base_template_name.html' %}
: {% load new_app_tags %}
new_app_tags
module file, create a custom template tag (see below).{% multiply_by_two | "5.0" %}
Example from step 5 above:
from django import template
register = template.Library()
@register.simple_tag
def multiply_by_two(value):
return float(value) * 2.0
Upvotes: 2
Reputation: 1172
The app that contains the custom tags must be in INSTALLED_APPS
. So Are you sure that your directory is in INSTALLED_APPS
?
From the documentation:
The app that contains the custom tags must be in
INSTALLED_APPS
in order for the{% load %}
tag to work. This is a security feature: It allows you to host Python code for many template libraries on a single host machine without enabling access to all of them for every Django installation.
Upvotes: 0
Reputation: 475
The error is in this line: (% load pygmentize %}
, an invalid tag.
Change it to {% load pygmentize %}
Upvotes: 17
Reputation: 2238
did you try this
{% load games_tags %}
at the top instead of pygmentize?
Upvotes: 10