如何在 Django 中创建自定义模板标签?
Django 提供了多种内置模板标签,例如 {% if %} 或 {% block %}。但是,Django 还允许您创建自己的模板标签来执行自定义操作。自定义模板标签的强大之处在于您可以处理任何数据并将其添加到任何模板,而不管执行的视图如何。您可以执行查询集或处理任何数据以在模板中显示结果。
指定自定义模板标签最常见的地方是在 Django 应用程序中。如果它们与现有应用程序相关,则将它们捆绑在那里是有意义的;否则,它们可以添加到新应用程序中。
Django 提供了以下帮助函数,允许您以简单的方式创建自己的模板标签:
- simple_tag : 处理数据并返回一个字符串
- include_tag :处理数据并返回渲染的模板
- assignment_tag :处理数据并在上下文中设置一个变量
解释:
如何使用示例创建自定义模板标记的插图。考虑一个名为 geeksforgeeks 的项目,它有一个名为 geeks 的应用程序。
Refer to the following articles to check how to create a project and an app in Django.
How to Create Basic Project using MVT in Django ?
How to Create an App in Django ?
在 django 应用程序 (geeks app) 目录中,创建一个新目录,将其命名为 templatetags,并向其中添加一个空的 __init__.py 文件以确保该目录被视为Python包。在同一文件夹中创建另一个文件并将其命名为 custom_tags.py。模块文件的名称是您稍后将用于加载标签的名称,因此请小心选择一个不会与另一个应用程序中的自定义标签和过滤器冲突的名称。 django 应用程序的文件结构应如下所示:
geeks/
__init__.py
models.py
...
templatetags/
__init__.py
custom_tags.py
在您的模板中,您将使用以下内容:
{% load custom_tags %}
您在 templatetags 包中放入的模块数量没有限制。请记住,{% load %} 语句将加载给定Python模块名称的标签,而不是应用程序的名称。
要成为一个有效的标签库,模块(custom_tags.py) 必须包含一个名为 register 的模块级变量,它是一个模板库实例,其中注册了所有标签。因此,在模块顶部附近,放置以下内容:
from django import template
register = template.Library()
在 models.py 中添加以下代码:
Python3
from django.db import models
# Create your models here.
class YourModel(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def __str__(self):
return self.first_name
Python3
from django import template
register = template.Library()
from .models import YourModel
@register.simple_tag
def any_function():
return YourModel.objects.count()
Python3
from django.contrib import admin
from django.urls import path
from django.views.generic.base import TemplateView
urlpatterns = [
path('admin/', admin.site.urls),
path('',TemplateView.as_view(template_name="Intro.html"),name="intro")
]
HTML
{% load custom_tag %}
Intro
{% any_function %} Persons in your model
创建此模型后,我们需要运行两个命令才能为其创建数据库。
Python manage.py makemigrations
Python manage.py migrate
我们将首先创建一个简单的标签来检索我们模型中名为 YourModel 的对象总数。编辑您刚刚创建的 custom_tags.py 文件并添加以下代码:
蟒蛇3
from django import template
register = template.Library()
from .models import YourModel
@register.simple_tag
def any_function():
return YourModel.objects.count()
在名为 geeksforgeeks 的项目的 urls.py flle 中添加以下代码
蟒蛇3
from django.contrib import admin
from django.urls import path
from django.views.generic.base import TemplateView
urlpatterns = [
path('admin/', admin.site.urls),
path('',TemplateView.as_view(template_name="Intro.html"),name="intro")
]
在应用程序目录(geeks)中创建名为 templates 的文件夹并创建名为 Intro.py 的文件并添加以下代码:
HTML
{% load custom_tag %}
Intro
{% any_function %} Persons in your model
现在跑,
python manage.py runserver
让我们检查一下 http://localhost:8000/ 上有什么 -
输出 -
DB 中的 Django 模型条目 –