如何在Django中创建自定义模板标签?

dsekswqp  于 2023-07-01  发布在  Go
关注(0)|答案(2)|浏览(115)

我是Django的新手,我正在尝试在Django中创建自定义标签
我的自定义标记文件templatetag/custom_tag.py

from django import template
from model_file.models import my_Model

register = template.Library()

@register.simple_tag
def get_custom_tag_fn():

    return my_Model.objects.all()

我的html文件

{% load custom_tag %}
    {% get_custom_tag_fn as queries %}
    {% for query in queries %}
      {{query.json_my_model_data}}
    {% endfor %}

我没有从这个代码中得到任何输出或错误。谁能指出我错在哪里。
关于我的model.py看起来像什么的更多信息

from django.db import models
from jsonfield import JSONField

class my_Model(models.Model):
    json_my_model_data = JSONField()
vcudknz3

vcudknz31#

看起来my_Model没有val1字段,如果你想在你的数据模型my_Model中显示json_my_model_data字段,你可能需要将你的模板更改为以下内容:

{% load custom_tag %}
{% get_custom_tag_fn as queries %}
{% for query in queries %}
  {{query.json_my_model_data}} # to get model's `json_my_model_data` content.
{% endfor %}

最重要的是,如果queries查询集至少有一个来自数据库的my_Model对象,{{query.json_my_model_data}}将只执行并显示json_my_model_data的内容。
关于自定义模板标签的更多信息。
希望能帮上忙。

pw9qyyiw

pw9qyyiw2#

你可以创建Django模板标签。* 你可以看到我的答案解释如何覆盖现有的Django模板标签:
首先,在core文件夹中创建templatetags文件夹,其中包含__init__.py(空文件)和custom_tags.py,其中settings.py如下所示,然后不要忘记重新启动服务器以将custom_tags.py应用到Django项目。* 其他名称对于custom_tags.py也很好,你可以看到我解释templatetags文件夹和load标签的答案:

django-project
 |-core
 |  |-settings.py
 |  └-templatetags # Here
 |     |-__init__.py
 |     └-custom_tags.py
 |-templates
 |  └-index.html
 |-app1
 └-app2

并且,不要忘记在settings.py中将core设置为INSTALLED_APPS,以将custom_tags.py应用于Django项目,如下所示。* 将core设置为INSTALLED_APPS也可以使用python manage.py collectstaticcore文件夹中的静态文件收集到Django Project根文件夹中。我建议在开始构建Django项目之前将core设置为INSTALLED_APPS

# "core/settings.py"

INSTALLED_APPS = [
    # ...
    'core', # Here
    'app1',
    'app2',
]

接下来,在custom_tags.py中创建带有@register.simple_tag的uppercase标记,如下所示。* 这一次,你不需要重启服务器,因为你已经重启了服务器来将custom_tags.py应用到Django项目:

# "custom_tags.py"

from django.template import Library

register = Library()

@register.simple_tag
def uppercase(arg):
    return arg.upper()

然后,使用uppercase标记,如下所示:

# "templates/index.html"

{% load custom_tags %}

{% uppercase "Hello World" %}

然后,将显示以下内容:

HELLO WORLD

相关问题