我有一个 django 网站,其中包含一个包含许多服务器详细信息的表。 表中的一列中有服务器的“ILO”IP。
我希望网站检查“ILO”IP 在 http 请求中是否有效,如果有效,则应显示链接,如果无效,则显示文本。
因此,在结果中,服务器将具有指向 ILO IP 的 http 链接,而某些服务器则没有。
在 View 的主类下,我创建了一个名为“checkUrlAvailable”的函数,我尝试在 index.html 中使用该函数,并检查 if 条件是否为 true 或 false。
由于某种原因,我收到错误 -
无法解析剩余部分:“checkUrlAvailable(server.IP)”中的“(server.IP)”
有人知道为什么吗?
index.html-
<tr>
<th><center> #</center></th>
<th width="100%"><center> Server Name </center></th>
<th><center> Owner </center></th>
<th><center> Project </center></th>
<th width="100%"><center> Description </center></th>
<th width="100%"><center> IP Address </center></th>
<th width="100%"><center> ILO </center></th>
<th><center> Rack </center></th>
<th><center> Status </center></th>
<th><center> Actions {{ response }} </center></th>
</tr>
</thead>
<tbody>
{% for server in posts %}
<tr>
<div class ="server">
<td></td>
<td style='white-space: nowrap'><center>{{ server.ServerName }}</center></td>
<td width="100%"><center>{{ server.Owner }}</center></td>
<td style='white-space: nowrap'><center>{{ server.Project }}</center></td>
<td style='white-space: nowrap'><center>{{ server.Description }}</center></td>
<td width="100%"><center>{{ server.IP }}</center></td>
<td style='white-space: nowrap'><center>
{% if checkUrlAvailable(server.ILO) is True %}
<a href="//{{ server.ServerName }}.ilo.lab.radcom.co.il"> http://{{ server.ServerName }}.ilo.lab.radcom.co.il </a>
{% else %}
http://{{ server.ServerName }}.ilo.lab.radcom.co.il
{% endif %}
<td width="100%"><center>{{ server.Rack }}</center></td>
<td width="100%"><h4><span class="badge badge-success">Online</span></h4></td></center>
views.py -
class HomeView(TemplateView):
template_name = 'serverlist.html'
def checkUrlAvailable(url):
resp = requests.head(url)
if resp.status_code == 200:
return True
else:
return False
def get(self, request):
form = HomeForm()
query = request.GET.get("q")
posts = serverlist.objects.all()
forms = {}
if query:
posts = serverlist.objects.filter(Q(ServerName__icontains=query) | Q(Owner__icontains=query) | Q(Project__icontains=query) | Q(Description__icontains=query) | Q(IP__icontains=query) | Q(ILO__icontains=query) | Q(Rack__icontains=query))
else:
posts = serverlist.objects.all()
for post in posts:
forms[post.id] = HomeForm(instance=post)
args = {'form' : form,'forms': forms, 'posts' : posts}
return render(request, self.template_name,args)
def post(self,request):
form = HomeForm(request.POST)
posts = serverlist.objects.all()
forms = {}
if form.is_valid(): # Checks if validation of the forms passed
post = form.save(commit=False)
post.save()
messages.success(request,'{0} has been added successfully!'.format(post.ServerName))
return redirect('serverlist')
messages.error(request,'Servername is required, please refresh the page and try again.')
for post in posts:
forms[post.id] = HomeForm(instance=post)
args = {'form' : form, 'forms': forms, 'posts' : posts}
return render(request, self.template_name,args)
最佳答案
您无法在 django 模板内调用函数。您需要定义自定义 template tag或者您可以将 checkUrlAvailable
移动到 serverlist
模型中:
class serverlist(models.Model):
...
def checkUrlAvailable(self):
resp = requests.head(self.ILO)
if resp.status_code == 200:
return True
else:
return False
并在模板中使用它,如下所示:
{% if server.checkUrlAvailable %}
关于javascript - Django 网站未正确检查链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48065582/