简介-我是一个名为application的对象,它在模型下面有很多属性。属性之一是用户。我想查看request.user是否在对象用户列表中
我尝试了将forloop
切片在模板中的多种方式,但均失败了。我只需要从循环中得到1个结果,即可“执行A” 或“执行B” ,具体取决于条件。即使我有一百万个应用程序。但是一旦获得3个申请,我就有2个“做A” 或2个“做B” 。除非我使用错误,否则|slice:":1"
不起作用。下面是我的代码
{% for app in applications %} #applications is a Application.objects.all()
{% if applicant.username in app.user.username %} #applicant is request.user The code checks if request.user is a part of objects.users list
<p> Do A </p>
{% else %}
<p> Do B </p>
{% endif %}
{% endfor %}
下面是我的模特
class Application(models.Model):
user = models.ForeignKey(User, related_name='verified')
applied_on = models.DateTimeField(auto_now_add=True)
... # Alot more fields
token = models.CharField(max_length=350)
答案 0 :(得分:1)
您在模板中执行的逻辑过多。可以在您的视图中尝试一下(伪代码,因为我不知道您的视图结构):
applicants = Application.objects.all().values_list('user__username', flat=True)
context = {'is_applicant': request.user.username in applicants}
在您的模板中:
if is_applicant:
something
else:
something else
答案 1 :(得分:0)
如果只需要第一个元素,则不需要for
循环。只需使用索引0
上的值(即第一个值):
{% if applicant.username in applications.0.user.username %}
<p> Do A </p>
{% else %}
<p> Do B </p>
{% endif %}
为便于记录,Django模板语言中没有break
语句。
答案 2 :(得分:0)
我终于明白了。仍在测试此代码到目前为止,它似乎仍在工作。如果有人可以改善此代码,我将非常喜欢。即使满足条件,循环仍在运行。 <!DOCTYPE html>
<html>
<head>
<meta name="viewport" charset="utf-8" content="width=device-width, initial-scale=1">
<link href='https://fonts.googleapis.com/css?family=Roboto:300italic,400italic,400,100,300,600,700' rel='stylesheet' type='text/css'>
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
</head>
<body>
<div class="row">
<div class="column" style="background-color:#;">
<h2>STRUCTURE</h2>
<br>
<br>
<br>
<div class="box-row">
<div>
<div class="box">
<div class="tooltip expand" data-title="Aiman Iskandar - Monitor all the operation in the CTS Division">
<p>Vice President</p>
<p>Business Technology</p>
<p>aiman iskandar</p>
</div>
<hr class="bar" />
</div>
<div>
<div class="box">
<p>Head</p>
<p> Consulting & Technology Services</p>
<p>aidil iman</p>
</div>
<hr class="bar2" />
</div>
<br />
<br />
</div>
</div>
</div>
<br>
</body>
</html>
不起作用
|slice:":1"
答案 3 :(得分:0)
这是我在视图中获得的方式,尽管现在为时已晚,明天仍要检查
def get_context_data(self, **kwargs):
context = super(CreateApplication, self).get_context_data()
context['applicant'] = self.request.user
context['applications'] = Application.objects.all() #Application.objects.filter(is what I have used though)
already_applied = None
for app in Application.objects.all(): #Application.objects.filter(is what I have used though)
if self.request.user.username in app.user.username:
already_applied = self.request.user
already_applied.save()
print(already_applied)
break
context['already_applied'] = already_applied
return context
下面是模板
{% if applicant == already_applied %}
<p> Do A </p>
{% else %}
<p> Do B </p>
{% endif %}