我有一个以:
结尾的模型def __str__(self): #python 3.3. is __str__
a = str(self.name) +'<br>' + str(self.phone)+'<br>'+ str(self.email)
return a
我这样做是为了在我的网站上的某个地方轻松填充表格单元格。但这不是我想要的其他方式。
所以在我看来,我试图通过尝试删除其他所有内容来仅显示self.name的内容。
allObj = LeadContact.objects.all()
for b in allObj:
b.name = b.name[0:b.name.find('<br>')]
我收到了错误:
Exception Value: 'ClientContact' object has no attribute 'find'
我的问题是双重问题,我可以对对象执行哪种操作以及如何才能最好地解决此问题?
答案 0 :(得分:1)
首先,您有错误,因为b.name
是ClientContact
的对象,因此您无法使用find
。您应首先执行str(self.name)
并在其上应用find
。
但是,我不认为改变views.py
中的输出是很方便的。快速方法是将当前__str__
方法的主体移动到类中的另一个方法(称之为html_display
)并从模板中调用该方法。
此外,将views.py中的html返回到模板并不是一个好习惯,您应该尽可能地将后端代码与前端代码分开。所以我建议为它创建一个django模板标签/过滤器。
答案 1 :(得分:1)
解决问题的最佳方法是创建一个新方法来生成html代码(而不是// Your bikes
$Bikes = array(1, 2, 3, 4);
// Rented bikes
$Rented = array(2, 3);
// Create a result array that we will fill as we loop
$Available = array();
// Find the difference manually by looping
foreach($Bikes as $Bike){
// If the bike isn't rented, add it to the Available array
if(!in_array($Bike, $Rented)) array_push($Available, $Bike);
}
var_dump($Available); // should contain 1 and 4
)并在模板中调用它。
将__str__
留给基本的 -
__str__
所以你可以做类似的事情 -
def __str__(self):
return self.name
然后在模板中调用此方法。