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
答案 0 :(得分:1)
您有两个不同的问题,而不仅仅是您所说的一个:
<div class="backdrop water">
<p class="text water">Water</p>
<div class="overlay water"></div>
</div>
:是警告
发生这种情况是因为E1101:Class 'Destination' has no 'objects' member
不了解我们的特殊Django变量。像pylint-django
这样的pylint插件可以解决问题。
pylint
:在代码的for循环中,您定义了一个名为E0601:Using variable 'Destination' before assignment
的变量。这不仅是不好的做法,因为python变量必须位于Destination
中,但它会覆盖lowercase_underscore
类,这就是导致此错误的原因。您可能想做这样的事情:
Destination
答案 1 :(得分:1)
您在自己的观点中写道:
for Destination in boards:
# ...
这意味着Python将Destination
视为 local 变量,这是在分配前您使用使用的局部变量。
您可以在循环中重命名变量以解决问题,但实际上,您可以使用.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,然后HTML会在响应中混在一起。通常,最好使用模板。