from django.http import HttpResponse
from .models import Destination
def index(request):
boards = Destination.objects.all()
boards_names = list()
for Destination in boards:
boards_names.append(Destination.destinationtext)
response_html = '<br>'.join(boards_names)
return HttpResponse(response_html)
我编写了这段代码只是为了练习 django 框架,但我通过 pylint 收到以下错误:
E1101:Class 'Destination' has no 'objects' member
E0601:Using variable 'Destination' before assignment
您有两个不同的问题,而不仅仅是您所说的一个:
E1101:Class 'Destination' has no 'objects' member
:是一个警告,pylint
不知道我们特殊的 Django 变量。像pylint-django
这样的 pylint 插件可能会解决问题。
E0601:Using variable 'Destination' before assignment
:在代码的 for 循环中,您定义了一个名为Destination
的变量。这不仅是不好的做法,因为 python 变量需要lowercase_underscore
而且它会覆盖Destination
类,这就是导致此错误的原因。您可能想做这样的事情:
for d in boards:
# Or:
for destination in boards:
你在观点中写道:
forDestinationin boards:
# ...
这意味着 Python 将Destination
视为局部变量,即您在分配之前使用的局部变量。
您可以在循环中重命名变量来解决问题,但实际上您可以使用.values_list(..)
使其更优雅、更快
from django.http import HttpResponse
from .models import Destination
def index(request):
response_html = '<br>'.join(
Destination.objects.values_list('destinationtext', flat=True)
)
return HttpResponse(response_html)
尽管如此,我仍然不相信这能解决问题,因为destinationtext
可能包含 HTML,然后它会在响应中混淆。通常最好使用模板。