Мой пользовательский 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 }}

Вернуться на верх