视图python django中的错误

时间:2014-08-04 07:53:54

标签: python django unicode views

def projectDetail(request):
    data = {'error':''}
    projects = Project.objects.all()
    if len(projects) == 0:
        data['error']='NO Project Information Available'
        html ="<html><body>%s</body></html>"%data['error']
        return HttpResponse(html)
    project = projects[0]
    html ="<html><body><ul>Project Description \
              <li>Project Name:"+project.name+"</li>\
              <li>Project Phase:"+ project.phase+"</li>\
              <li>Project City: "+ project.city+"</li>\
              <li>Project Description:"+project.description+"</li>\
              <li>Builder Name:"+ project.builders.all()[0].name+"</li>\
              <li>Builder Description:"+ project.builders.all()[0].description+"</li>\
              <li>Builder Type:"+ project.builders.all()[0].builder_type.name+"</li>\
              </ul></body></html>"
    return HttpResponse(html)

这是我的代码,当我请求此视图时,我收到错误:

Exception Type: TypeError
Exception Value:    
coercing to Unicode: need string or buffer, City found

这是什么解决方案

2 个答案:

答案 0 :(得分:3)

该错误将来自这一行:

<li>Project City: "+ project.city+"</li>\

您可能需要在城市模型上添加__str____unicode__方法。

那就是说 - 你真的不应该像这样建立HTML响应 - 而是使用Django's template enginePart 3 of the Django tutorial可能会帮助您从这里开始。

答案 1 :(得分:1)

 projects = Project.objects.all()

它是一个迭代器对象,你需要迭代它得到项目细节。      项目中的项目:          project.city          project.your field

如果city是不同的表或关系键,则需要定义

 def __str__(self):     # for django 2.* version    
     return self.name 

def __unicode__(self):
     return self.name       # for django 3.* version