首页 > 解决方案 > 无法注册 django 自定义模板标签

问题描述

我想注册 3 个自定义模板标签并在我的项目的所有页面中显示它们生成的信息。我已阅读文档并创建了以下文件:

blog_tags.py

from django import template
from django.db.models import Count
from ..models import Post

register = template.Library()


@register.simple_tag
def total_posts():
    return Post.published.count()


@register.inclusion_tag("blog/post/latest_posts.html")
def show_latest_posts(count=5):
    latest_posts = Post.published.order_by("-publish")[:count]
    return {"latest_posts": latest_posts}


@register.simple_tag
def get_most_commented_posts(count=5):
    return Post.published.annotate(total_comments=Count("comments")).order_by(
        "-total_comments"
    )[:count]

还有我的模板:base.html

{% load static %}
{% load blog_tags %}
<!DOCTYPE html>
<html>

  <head>
    <title>
      {% block title %}{% endblock %}
    </title>
    <link href="{% static "css/blog.css" %}" rel="stylesheet">
  </head>

  <body>
    <div id="content">
      {% block content %}{% endblock %}
    </div>
    <div id="sidebar">
      <h2>
        My blog</h2>
      <p>
        This is my blog. I've written
        {% total_posts %}
        posts so far.</p>
      <h3>
        Latest posts</h3>
      {% show_latest_posts 3 %}
      <h3>
        Most commented posts</h3>
      {% get_most_commented_posts as most_commented_posts %}
      <ul>
        {% for post in most_commented_posts %}
          <li>
            <a href="{{ post.get_absolute_url }}">
              {{ post.title }}
            </a>
          </li>
        {% endfor %}
      </ul>

    </div>
  </body>

</html>

但是,标签没有被加载。页面打不开。相反,我收到以下错误:Invalid block tag on line 3: 'total_posts'. Did you forget to register or load this tag?如您所见,我确实已经加载了我的标签,{% load blog_tags %}所以我不明白出了什么问题。

这是我的代码的文件夹结构:

在此处输入图像描述

标签: pythonhtmldjangodjango-viewsdjango-templates

解决方案


Django 文档 Development server won’t automatically restart中所述。

因此,重新启动您的开发服务器将解决您的问题。


推荐阅读