如果日期早于10天,Django将显示特定文本
我正在为一个客户做一个项目,如果用户加入日期超过十天,他希望在表中显示“警报”。我不想使用过滤器只返回满足查询的对象,因为我想显示表中的所有成员。我正在使用Django 2.x和python 3.6。任何帮助都将不胜感激 models.py:如果日期早于10天,Django将显示特定文本,django,python-3.x,django-views,Django,Python 3.x,Django Views,我正在为一个客户做一个项目,如果用户加入日期超过十天,他希望在表中显示“警报”。我不想使用过滤器只返回满足查询的对象,因为我想显示表中的所有成员。我正在使用Django 2.x和python 3.6。任何帮助都将不胜感激 models.py: class Member(models.Model): name = models.CharField('Name', max_length=50,) join_date = models.DateField('Join Date', au
class Member(models.Model):
name = models.CharField('Name', max_length=50,)
join_date = models.DateField('Join Date', auto_now=False, auto_now_add=False,)
views.py:
def memberList(request, template_name='members/memberList.html'):
member = Member.objects.all()
data = {}
data['object_list'] = member
return render(request, template_name, data)
和我的模板memberList.html:
{% extends "base.html" %}
{% load static %}
{% block content %}
<table>
<thead>
<tr>
<th>Name</th>
<th>Join Date</th>
<th>Alert</th>
</tr>
</thead>
<tbody>
{% for member in object_list %}
<tr>
<td>{{ member.name }}</td>
<td>{{ member.join_date }}</td>
<td> **??**</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{%extends“base.html”%}
{%load static%}
{%block content%}
名称
加入日期
警觉的
{对象_列表%中的成员的百分比}
{{member.name}
{{member.join_date}
**??**
{%endfor%}
{%endblock%}
至少有两种方法可以实现这一点
方法查找方法
编辑:这一张的信用卡转到,我在编辑我的信用卡时没有看到
首先,请确保您了解有关从模板中访问方法调用的内容
对于你的事业,你会发现最有趣的是:
(…)当然,您可以轻松访问在自己的模型上显式定义的方法
记住这一点,我鼓励你检查一下
自定义模板标记方法
您可以使用Django templates的if语句并使用自定义模板标记来计算实际结果。它应该看起来像
来自django导入模板的
导入日期时间
register=template.Library()
@register.filter(预期\u localtime=True)
def早于十天(值):
如果isinstance(值,datetime.datetime):
value=value.date()
delta=value-datetime.date.today()
返回增量天>10
然后在模板中使用它,如下所示:
(...)
{% for member in object_list %}
<tr>
<td>{{ member.name }}</td>
<td>{{ member.join_date }}</td>
<td>{% if member.join_date|is_older_than_ten_days %}YOUR INFO
{% else %}something else{% endif %}</td>
</tr>
{% endfor %}
(...)
import datetime
def memberList(request, template_name='members/memberList.html'):
data={}
members = Member.objects.all()
for i in members:
delta=datetime.datetime.today() - i.join_date
if delta.days < 10:
i.isOld=False
else:
i.isOld=True
data["object_list"]=members
return render(request, template_name, data)
(…)
{对象_列表%中的成员的百分比}
{{member.name}
{{member.join_date}
{%if member.join|date|大于_ten_days%}您的信息
{%else%}其他内容{%endif%}
{%endfor%}
(...)
有关详细信息,请参阅。您可以获取所有对象,然后为每个对象添加一个字段,无论该对象是否已存在10天。您可以指定一个布尔变量,例如isOld,并通过
{%if isOld%}
在模板中呈现,如下所示:
(...)
{% for member in object_list %}
<tr>
<td>{{ member.name }}</td>
<td>{{ member.join_date }}</td>
<td>{% if member.join_date|is_older_than_ten_days %}YOUR INFO
{% else %}something else{% endif %}</td>
</tr>
{% endfor %}
(...)
import datetime
def memberList(request, template_name='members/memberList.html'):
data={}
members = Member.objects.all()
for i in members:
delta=datetime.datetime.today() - i.join_date
if delta.days < 10:
i.isOld=False
else:
i.isOld=True
data["object_list"]=members
return render(request, template_name, data)
导入日期时间
def成员列表(请求,模板_name='members/memberList.html'):
数据={}
members=Member.objects.all()
我谨此陈辞:
delta=datetime.datetime.today()-i.join\u date
如果增量天数<10:
i、 isOld=False
其他:
i、 isOld=True
数据[“对象列表”]=成员
返回渲染(请求、模板名称、数据)
在模板中,您可以:
{% extends "base.html" %}
{% load static %}
{% block content %}
<table>
<thead>
<tr>
<th>Name</th>
<th>Join Date</th>
<th>Alert</th>
</tr>
</thead>
<tbody>
{% for member in object_list %}
<tr>
<td>{{ member.name }}</td>
<td>{{ member.join_date }}</td>
{% if member.isOld %}
<td style="color:red;"> Old Alert</td>
{% else %}
<td style="color:green;"> New Alert</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{%extends“base.html”%}
{%load static%}
{%block content%}
名称
加入日期
警觉的
{对象_列表%中的成员的百分比}
{{member.name}
{{member.join_date}
{%if member.isOld%}
旧警报
{%else%}
新警报
{%endif%}
{%endfor%}
{%endblock%}
您可以简单地向模型中添加一个方法,如下所示:
class Member(models.Model):
name = models.CharField('Name', max_length=50,)
join_date = models.DateField('Join Date', auto_now=False, auto_now_add=False,)
def older_than_ten_days(self):
return (datetime.date.today() - self.join_date).days > 10
然后,您的模板就变成:
<tr>
<td>{{ member.name }}</td>
<td>{{ member.join_date }}</td>
<td>{{ member.older_than_ten_days }}</td>
</tr>
{{member.name}
{{member.join_date}
{{member.older_than_ten_days}
但是,如果需要向该方法传递更多参数,如可变天数,则必须使用,您可以使用Models.object.filter在views.py中进行过滤 如图所示,我在项目中所做的是使用HTML默认日期进行日期选择,即proj1/templates/tasks.HTML
<form method="POST" action="/tasks/">
{% csrf_token %}
<input type="date" value="date" id="date" name="date">
<button type="submit" class="btn-submit">Submit</button>
</form>
然后在proj1/app1/views.py中
def tasks(request):
if request.method == "POST":
date01 = request.POST['date']
s1 = request.session['session_id']
if Tasks01.objects.filter(day=date01).exists():
print('yes')
task = Tasks01.objects.filter(day=date01,registerdb4=s1)
return render(request, "tasks.html", {'task': task})
else:
print("no records")
return render(request, "tasks.html")
return render(request, "tasks.html")
嘿,我的答案对你有用吗?如果是,请接受其中任何一个。