Django - 您是否忘记注册或加载此标记?

123*_*123 13 python django django-templates templatetags pygments

我已经创建了一个我想要使用的自定义标签,但是Django似乎无法找到它.我的templatetags目录设置如下:

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())
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用此标记来呈现代码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 %}
Run Code Online (Sandbox Code Playgroud)

当我导航到时gameprofile.html,我收到一个错误:

第23行的块标记无效:'code',预期'endblock'.您是否忘记注册或加载此标记?

vip*_*maa 15

对于 Django 2.2 到 3,您必须在 html 模板中加载静态文件,然后再使用static关键字

{% load staticfiles %}
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
Run Code Online (Sandbox Code Playgroud)

对于其他版本使用静态

{% load static %}
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
Run Code Online (Sandbox Code Playgroud)

您还必须检查您是否setting.py 中定义了STATIC_URL

最后,确保静态文件存在于定义的文件夹中

  • 对于 Django 3 仅使用 `{% load static %}` (2认同)

小智 10

{% load static %}
<img src="{% static "my_app/example.jpg" %}" alt="My image">
Run Code Online (Sandbox Code Playgroud)

在您的模板中,使用静态模板标记使用配置的STATICFILES_STORAGE.


los*_*see 9

你试过这个吗?

{% load games_tags %} 
Run Code Online (Sandbox Code Playgroud)

在顶部而不是pygmentize?

  • 原帖中没有"game_tags".这个答案没有帮助. (7认同)
  • 为什么?Pygmentize被game_tags取代?没有带game_tags名称的文件 (6认同)

小智 9

错误在此行:(% load pygmentize %},无效标记.将其更改为{% load pygmentize %}

  • 没有人从括号开始,一个用括号开头 (7认同)
  • 呃,那些是相同的字符串。? (3认同)

Tho*_*ohn 6

{% load static %}
Run Code Online (Sandbox Code Playgroud)

请将此模板标记添加到 HTML 或基本 HTML 文件的顶部


小智 5

遇到了同样的问题,但我刚刚{% load static %}从我的扩展模板中添加并且它有效。因此,在您的情况下,如果您尝试gameprofile.html从基本模板加载,您只需要像这样添加它:

{% extends 'some_base.html' %}
{% block content %}
{% load pygmentize %}
Run Code Online (Sandbox Code Playgroud)


Ahm*_*sny 0

包含自定义标签的应用程序必须采用INSTALLED_APPS. 那么你确定你的目录在吗INSTALLED_APPS

文档中:

包含自定义标签的应用程序必须正常运行,标签INSTALLED_APPS才能{% load %}正常工作。这是一项安全功能:它允许您在单个主机上托管许多模板库的 Python 代码,而无需为每个 Django 安装启用对所有模板库的访问。

  • 这是错误的,操作存储模板标签的位置没有任何问题,并且它们不被归类为应用程序 (2认同)
  • 这里唯一的应用程序是“游戏”,必须包含它,否则操作尝试在其中渲染其标签的实际模板将不可用。 (2认同)