Мой пользовательский templatetag не работает. Вывод пустой
Вот структура папок:
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
установлен.
Это Django 5.0.6 под Windows.
Я уверен, что это что-то простое, но не могу понять.
Мне кажется, вы неправильно понимаете, как работают простые теги в 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 }}