这是文件夹结构:
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 中的工作原理。标签的工作方式如下:
{{ 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 }}