python - Django 变量处理——为什么会这样?
问题描述
我对 django 很陌生,在我创建的这个 views.py 文件中遇到了一些让我感到困惑的东西。我只是玩了一下,想出了一些可行的方法,但我不明白为什么会这样。
Draft_Order 类(我在另一个文件中有)请求 NBA 统计页面,在后端执行一些计算,并输出选秀彩票赔率(新选秀)。初始化、模拟草稿和获取排名的方法都在后端完成(完美运行)。
现在,我的问题是我不明白为什么我可以在所有函数之外创建类 DraftOrder 的实例“f”,但仍然能够在我的大多数函数中引用它,因为它们是从我的urls.py 文件,所以看起来它们根本不应该工作。此外,由于某种原因,如果我在函数中没有对 f 的赋值,更新函数只能引用“f”——例如,如果我添加了该行
f = temp
然后突然之间它给了我一个“unboundlocalerror”,并说 f 在分配之前被引用。
我很感激这方面的任何帮助。谢谢。
from django.shortcuts import render
from django.http.response import HttpResponse
from simulator.draft_simulator import Draft_Order
from simulator.models import Order
# Create your views here.
f = Draft_Order()
f.initialize()
def index(request):
return HttpResponse('<p>Hello World</p>')
def init(request):
return HttpResponse(f.initalodds.to_html())
def table(request):
f.sim_draft()
return HttpResponse(f.finaltable.to_html())
def update(request):
temp = Draft_Order()
temp.get_standings()
if temp == f:
return HttpResponse('Same!')
else:
return HttpResponse('updated!')
解决方案
发生 UnboundLocalError 是因为函数内部存在对整个函数f
的全局赋值。f
您需要明确声明f
引用全局变量:
def update(r):
global f
if f == ...
f = Draft_Order() # new draft order
但实际上,您不应该依赖存储在 RAM 中的全局值,因为在生产环境中,您将拥有几个可能具有不同f
s 的进程,并且您将无法控制所述进程的生命周期。最好在这里依赖持久内存(数据库、键值存储、文件等)。
推荐阅读
- javascript - 在 JavaScript 代码中在 Google 地图中添加更多具有不同位置的标记
- sql - 需要帮助根据模式从数组或行中查找循环
- javascript - 如何在 JQuery 1.10.2 Ajax 变量中获取隐藏的输入值?
- javascript - 从前端发送电子邮件,由 cronjob 触发(使用 NightwatchJS?)
- python - Keras 中的随机 ReLU
- javascript - 在 fullcalendar v4 中编辑和删除事件
- json - 在flutter中解析json时如何修复类型错误?
- python - 如何使用 pydantic 链接验证
- excel - 使用参数抛出语法错误调用其他子
- css - 我想像推特一样画垂直线