我的自定义模板标签不起作用。输出为空

问题描述 投票:0回答:1

这是文件夹结构:

homepage (this is the Django app)
|
|templatetags
|  __init__.py
|  shamsi_tags.py

shamsi_tags.py
的内容:

from datetime import datetime

from django import template

from jdatetime import datetime as jdatetime

register = template.Library()


@register.simple_tag
def shamsi_date():
    """
    This template tag returns the current date in Shamsi format.
    """
    now = datetime.now()
    shamsi_date = jdatetime.fromgregorian(now.year, now.month, now.day)
    return shamsi_date.strftime('%Y/%m/%d')

index.html

{% load shamsi_tags %}
...
<div>{{ shamsi_date }}</div>
...

什么也没有显示。我检查了页面源代码,它显示

<div></div>

页面的其余部分显示正确,因此我猜 URL 或视图没有任何问题。

显然

jdatetime
已安装。

Windows 上的 Django 5.0.6。

我确信这很简单,但我无法弄清楚。

django django-templates
1个回答
0
投票

我认为您误解了简单标签在 Django 中的工作原理。标签的工作方式如下:

{{ some_value | lower_tag }}

您定义一个标签,例如:

@register.simple_tag
def lower(some_value):
   return some_value.lower()

在您的场景中,您只是尝试使用没有值的标签。如果您想将

shamsi_date
赋予 HTML 模板,只需将其设为常规函数,然后在发送给用户时将其传递给模板即可。

def shamsi_date():
    now = datetime.now()
    shamsi_date = jdatetime.fromgregorian(now.year, now.month, now.day)
    return shamsi_date.strftime('%Y/%m/%d')

# Assuming you have an index function
def index(request):
    # rest of function
    shamsi = shamsi_date()
    render(request, "index.html", {"shamsi_date" : shamsi })

在此之后,您应该能够通过执行以下操作来获取 shamsi_date

{{ shamsi_date }}

© www.soinside.com 2019 - 2024. All rights reserved.