【问题标题】:Django when I try to search a form its value gets u'Django 当我尝试搜索表单时,它的值得到你'
【发布时间】:2011-02-07 00:05:07
【问题描述】:

我正在尝试执行搜索教程,但出现错误,显示我搜索的是 u'foo' 而不是 foo。如果我只是用'%s' % q 打印消息,它只会显示foo

def search(request):
   q = request.GET.get("q",None)
   if q:
       message = '%s' % q
       message = Envio.objects.get(destinatario=message)
   else:
      message = 'Empty'
    return HttpResponse(message)

def search_form(request):
     return render_to_response('envios/search_form.html')

错误:

Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  100.                     response = callback(request, *callback_args,     **callback_kwargs)
File "C:\mysite\envios\views.py" in search
  35.         message = Envio.objects.get(destinatario=message)
File "C:\Python27\lib\site-packages\django\db\models\manager.py" in get
  132.         return self.get_query_set().get(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in get
   347.                     % self.model._meta.object_name)

   Exception Type: DoesNotExist at /envios/search/
   Exception Value: Envio matching query does not exist.

在此之下:

Request information

 GET
 Variable     Value
 q             u'102'

【问题讨论】:

  • 请显示错误。错误发生在哪里?
  • 请注意,如果您print '%r' % q,您将看到 unicode 字符串的实际表示。
  • @Jaime - destinatario 是 Envio 模型的一个领域吗?
  • 当我使用 shell 执行 objetcs.get(id=something) 时,它可以工作。
  • @Jaime - 是 destinatario 字符串类型或整数类型。如果查询中的类型不匹配,则可能会出现错误。因此,请尝试使用 message = str(q)message = int(q) 而不是 message = '%s' % q

标签: django unicode get


【解决方案1】:

u'' 仅表示字符串以 unicode 显示。 django 中的默认编码是 unicode。不要太在意 u'' ,实际结果总是单引号之间的字符串。

更多信息,请看这里。 http://docs.djangoproject.com/en/dev/ref/unicode/

因此,如果查询中的类型不匹配,则可能会出现错误。所以不是

message = '%s' % q 

试试

message = str(q) 

message = int(q)

视情况而定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 2022-10-04
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2021-09-20
    • 2022-06-23
    相关资源
    最近更新 更多