【问题标题】:local variable 'server_name' referenced before assignment in django view在 django 视图中分配之前引用的局部变量“server_name”
【发布时间】:2016-01-27 12:35:45
【问题描述】:

我正在创建一个将服务器存储在数据库中的 Django 应用程序。服务器来自通过第三方应用程序的列表。所以我的应用程序需要通过列表添加任何尚未在数据库中的服务器,并删除任何在数据库中但不在列表中的服务器。但是,当我尝试删除部分要求时,我不断收到 referenced before assignment 代码部分的错误 Server.objects.filter(server_name in i) 现在我不确定我是否可以像我所做的那样做server_name in i,但我只是在玩弄它。执行Server.objects.filter(server_name=i) 时出现错误(我知道应该可以)。任何人都可以帮忙吗?

from django.shortcuts import render
from django.http import HttpResponse
from .models import Server
from hive.cloud.pyraxhelpers.pyraxhelpers import list_hostnames
from django.core.exceptions import ObjectDoesNotExist

def server_home(request):
    return render(request, 'templates/index.html', {})

def server(request):
    server_name = Server.objects.get(server_name)
    for i in list_hostnames():
        print "Going through list"
        if Server.objects.filter(server_name=i).exists():
            print "Server exists so skip"
        else:
            if Server.objects.filter(server_name in i): 
               print "Add the new server"
               server_name = Server.objects.create(server_name=i)
                return HttpResponse("Added")
            else:
                print "Delete"
                return HttpResponse("Deleted")
return HttpResponse("Worked")

型号

class Server(models.Model):
    server_name = models.CharField(primary_key=True, max_length=250)
    renewal_date = models.DateField('expiry date', null=False, default=timezone.now)
    deletion_date = models.DateField('deletion date', null=False, default=timezone.now)
    def __unicode__(self):
        return self.server_name

【问题讨论】:

  • 从哪里得到server_name 参数?
  • server_name 来自模型,是数据库中的一个字段,但我不知道如何引用它
  • 我认为这条线根本没有任何作用,因为无论如何你以后都不会使用它。只需将其注释掉,看看会发生什么。您还有其他问题,例如两个 else 块。
  • .. 和第一个 else 块中的无效查找 (sever_name in i)。
  • 忽略这些问题,缩进只是堆栈溢出,我在帖子中确实提到过 server_name in i 只是我在玩,看看有什么用。它与我所质疑的错误无关。我不能只是评论它,因为我需要它来满足要求。

标签: python django django-views


【解决方案1】:

您收到此错误是因为您在赋值之前引用了 server_name 变量,就像错误所说的那样。

问题出在这一行:

server_name = Server.objects.get(server_name)

第二个server_name 变量应该包含什么? Python 不知道。

您似乎想在调用中添加一个参数,例如def server(request, server_name)。确保同时更改您的 urls.py。

【讨论】:

  • server_name 是模型Server,是数据库中的一个字段,那我怎么引用呢?
  • 查看编辑:我不清楚你到底要做什么,但看起来你想为你的 server(request) 函数提供一个参数 server_name
  • 我想使用 'server_name' 字段来检查 'list_hostname' 中的 'i' 是否等于数据库中的任何 server_names。添加 server_name 作为参数不起作用,因为它只需要一个参数。
  • 请发布您的模型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
相关资源
最近更新 更多