扩大了在一个偶数后使帖子离线的可能性

2024-04-30 03:12:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用以下代码扩展在this question中显示的函数:

@property
def is_expired(self):
    print(self.publishing_date)
    if self.membership == "One Month":
        if self.publishing_date + datetime.timedelta(days=30) < datetime.datetime.now():
            message = 'Scaduto'
            return message
        else:
            expiring_date = self.publishing_date + datetime.timedelta(days=30)
            delta = expiring_date - datetime.datetime.now()
            return delta
    else:
        if self.publishing_date + datetime.timedelta(days=365) < datetime.datetime.now():
            message = 'Scaduto'
            return message
        else:
            expiring_date = self.publishing_date + datetime.timedelta(days=365)
            delta = expiring_date - datetime.datetime.now()
            return delta
    return False

我要使用此新模板:

  {% for asset in user_details.authorized_user_set.all %}
    {% if not asset.is_expired %}
    <tr>
      <td class="text-left"><p><strong><a class="text-info" href="{{ asset.get_absolute_url }}">{{ asset.title }}</a></strong></p></td>
      <td class="text-center">
        {% if asset.type == "3D Region" %}
          <p class="badge badge-pill badge-primary">{{ asset.type }}</p>
        {% elif asset.type == "3D Village" %}
          <p class="badge badge-pill badge-secondary">{{ asset.type }}</p>
        {% else %}
          <p class="badge badge-pill badge-success">{{ asset.type }}</p>
        {% endif %}
      </td>
      <td class="text-right"><p>{{ asset.publishing_date }}</p></td>
      <td class="text-center">
        {% if asset.membership == "One Month" %}
          <p class="badge badge-pill badge-warning">{{ asset.membership }}</p>
        {% else %}
          <p class="badge badge-pill badge-danger">{{ asset.membership }}</p>
        {% endif %}
      </td>
      <td class="text-right"><p>{{ asset.delta }}</p></td>
    </tr>
    {% endif %}
  {% endfor %}

在Django管理面板中,我可以正确地看到我想要的所有内容,如下图所示,但是模板给了我一个空表。如果我删除了else条件,即返回delta everything可以正常工作,那么问题就在这里,但是如果我使用完整的代码,我不知道为什么Django管理面板中的一切都可以正常工作。你知道吗

enter image description here


Tags: textbadgeselfdatetimedatereturniftype
1条回答
网友
1楼 · 发布于 2024-04-30 03:12:00

它返回一个空表,因为您的属性is_expired总是返回一个非假值。您的asset.is_expired检查应该检查asset.is_expired == 'Scaduto'。你知道吗

但是,我建议您在模型中使用以下逻辑:

@property
def expiration_date(self):
    if self.membership == "One Month":
        return self.publishing_date + datetime.timedelta(days=30)
    else:
        return self.publishing_date + datetime.timedelta(days=365)

@property
def is_expired(self):
    return self.expiration_date < datetime.datetime.now()

@property
def delta(self):
    return self.expiration_date - datetime.datetime.now() if not self.is_expired else 'Scaduto'

然后,您可以在模板中根据需要使用它。如果您想要的是像在管理面板中一样拥有它:

  {% for asset in user_details.authorized_user_set.all %}
    <tr>
      <td class="text-left"><p><strong><a class="text-info" href="{{ asset.get_absolute_url }}">{{ asset.title }}</a></strong></p></td>
      <td class="text-center">
        {% if asset.type == "3D Region" %}
          <p class="badge badge-pill badge-primary">{{ asset.type }}</p>
        {% elif asset.type == "3D Village" %}
          <p class="badge badge-pill badge-secondary">{{ asset.type }}</p>
        {% else %}
          <p class="badge badge-pill badge-success">{{ asset.type }}</p>
        {% endif %}
      </td>
      <td class="text-right"><p>{{ asset.publishing_date }}</p></td>
      <td class="text-center">
        {% if asset.membership == "One Month" %}
          <p class="badge badge-pill badge-warning">{{ asset.membership }}</p>
        {% else %}
          <p class="badge badge-pill badge-danger">{{ asset.membership }}</p>
        {% endif %}
      </td>
      <td class="text-right"><p>{{ asset.delta }}</p></td>
    </tr>
  {% endfor %}

相关问题 更多 >