Навсегда заменить значение в Джанго - PullRequest
0 голосов
/ 25 августа 2018

После интенсивного поиска в Google, я до сих пор не нашел эффективного способа решить эту проблему.

Я создаю сайт, используя Django. У меня есть БД, которая содержит данные о времени, более конкретно даты. Значение для «настоящего» установлено в 3000-01-01 (ГГГГ-ММ-ДД), как это принято для запросов времени.

Что я хочу сделать, это отобразить строку типа «Сейчас» или «Настоящее время» или любое другое значение вместо даты 3000-01-01. Есть ли какое-нибудь глобальное переопределение где-нибудь, что я могу использовать? Похоже, напрасно тратить время на жесткое кодирование его в каждом представлении / шаблоне.

Ура!

1 Ответ

0 голосов
/ 25 августа 2018

Поскольку это рендеринг, я бы посоветовал не использовать " подклассы " для DateField, чтобы он отображал 'now' вместо исходного объекта date(..): он сделает вычисления на уровне модели болеегромоздкий.

Вероятно, хороший способ справиться с этим - реализовать шаблонный шаблон [Django-doc] , например, мы можем создать файл:

#  app/templatetags/nowdate.py

from django import template

register = template.Library()

PRESENT = date(3000, 1, 1)

@register.filter
def nowdate(value):
    if value == PRESENT:
        return 'present'
    return value

Каталог templatetags приложения app также должен содержать файл __init__.py (пустой файл), и, конечно, app должен быть частью INSTALLED_APPSв settings.py.

Затем мы можем использовать его в шаблоне, например:

<!-- app/templates/app/some_template.html -->
{{ some_model.some_date_field<b>|nowdate</b> }}

Здесь мы, таким образом, получаем some_date_field переменной some_model (таким образом, этот атрибутобъект date(..)), и мы пропускаем его через фильтр nowdate, который мы сконструировали так, что если он равен 3000-01-01, он заменяется строкой 'present'.

Преимуществоздесь то, что, если мы позже передумаем о том, что дата "настоящее", мы можем легко изменить его вФильтр шаблонов, кроме того, мы можем легко расширить его, например, добавив 'past', 'future' и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...