我正在将文件上传功能添加到我的前任创建的网站中。当前版本如下所示:
问题在于,上传自定义数据和上传之间应该有一个按钮用于浏览和拾取文件,但没有
更奇怪的是,在选择资产1和资产2后,然后单击计算,浏览文件的按钮突然出现,浏览…和上传按钮工作正常:
此页面的HTML代码为correlation.HTML:
{% extends "instvol/layout.html" %}
{% block body %}
<div class="container about-container">
<div class="row">
<h2>Correlation Analysis</h2>
</div>
<div class="row">
<form method="GET">
<div class="corr-form">
<fieldset id="additional-field-model">
<div class="form-group">
<div class="col-md-6 col-sm-12">
<label class="col-md-12 control-label" for="field-a">Asset 1</label>
<div class="input-group">
<select id="field-a" name="field-a" class="form-control input-md" required="">
<option disabled="" selected="">Select</option>
{% for ticker in ticker_list %}
<option value="{{ticker}}" {% if symbolName == ticker %}{% endif %}>{{ticker}}</option>
{% endfor %}
</select>
</div>
</div>
<div class="col-md-2 col-xs-5">
<label class="col-md-12 control-label" for="field-b">Asset 2</label>
<div class="input-group">
<select id="field-b" name="field-b" class="form-control input-md" required="">
<option disabled="" selected="">Select</option>
{% for ticker in ticker_list %}
<option value="{{ticker}}" {% if symbolName == ticker %}{% endif %}>{{ticker}}</option>
{% endfor %}
</select>
</div>
</div>
<div class="col-md-4 col-xs-7 text-right">
<label class="col-xs-12 control-label" for="field-c"><br/></label>
<a href="javascript:void(0);" class="btn btn-warning remove-this-field"> <span class="hidden-xs"> Delete </span> </a>
<a href="javascript:void(0);" class="btn btn-success create-new-field"> <span class="hidden-xs"> Add </span> </a>
</div>
</div>
</fieldset>
</div>
<script>
$('#additional-field-model').duplicateElement({"class_remove": ".remove-this-field",
"class_create": ".create-new-field", });
</script>
<hr>
<div class="form-group">
<span class="glyphicon glyphicon-calendar" aria-hidden="true"></span>
<label for="input-daterange">Date Range</label>
<input type="text" class="form-control" name="daterange"/>
</div>
<div>
<button type="submit" class="btn btn-primary">Calculate</button>
</div>
</form>
</div>
<hr>
<div class="row">
<div class="panel-body">
<!-- Standar Form -->
<h4>Upload Custom Data</h4>
<form method="POST" enctype="multipart/form-data"">
{% csrf_token %}
<div>
<div class="form-group">
{{ form }}
</div>
<div>
<button type="submit" class="btn btn-primary">Upload</button>
</div>
</div>
</form>
</div>
</div>
<hr>
<div class="row">
<h4> Asset Price</h4>
<div class="col-lg" id="plotly-figure-his">
{{ plot_div_spot|safe }}
</div>
<hr>
<h4>Historical Correlation</h4>
<div class="col-lg" id="plotly-figure-his">
{{ plot_div_his|safe }}
</div>
<hr>
<h4>Instantaneous Correlation</h4>
<div class="col-lg" id="plotly-figure">
{{ plot_div_inst|safe }}
</div>
</div>
</div>
<script>
</script>
{% endblock %}
视图.py中的相关部分如下所示:
def correlation(request):
if request.method == 'POST': #custom upload
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
cusdata = pd.read_csv(request.FILES['file'], header=None)
spot1 = ['Asset 1', ]
spot2 = ['Asset 2', ]
symbolPair = list(zip(spot1, spot2))
start = 1
end = len(cusdata)
rhodata = []
for pair in symbolPair:
f1 = pd.DataFrame({'price':cusdata.iloc[:,0].astype('double')})
f2 = pd.DataFrame({'price':cusdata.iloc[:,1].astype('double')})
T = (end-start) / 252
corr = getcorr(f1, f2, T)
corr.append(' / '.join(list(pair)))
rhodata.append(corr)
spotdata = []
spots = list(set(spot1+spot2))
for i in range(len(spots)):
spotval = pd.DataFrame({'price':cusdata.iloc[:,i].astype('double')})
spotdata.append([spotval, spots[i]])
instcorrdiv = instvol.myplotly.getcorrdiv(rhodata)
hiscorrdiv = instvol.myplotly.getcorrdiv(rhodata, isHis=1)
spotdiv = instvol.myplotly.getspotdiv(spotdata)
else:
spot1 = request.GET.getlist('field-a')
spot2 = request.GET.getlist('field-b')
symbolPair = list(zip(spot1, spot2))
daterange = request.GET.get('daterange', 'None')
if len(symbolPair) == 0:
symbolPair = [['SPX','NDWLIT'], ['SPX', 'FTMIGMI'], ['SPX','GBIEMDCW']]
spot1 = list(zip(*symbolPair))[0]
spot2 = list(zip(*symbolPair))[1]
if daterange == 'None':
context = pickle.load(open( "defaultcorr_context.p", "rb" ))
template = loader.get_template('instvol/correlation.html')
return HttpResponse(template.render(context, request))
daterange = daterange.replace(' ','').split('-')
start = datetime.datetime.strptime(daterange[0], '%Y%m%d')
end = datetime.datetime.strptime(daterange[1], '%Y%m%d')
rhodata = []
for pair in symbolPair:
f1 = Stock.objects.get(ticker=pair[0]).stockprice_set.filter(ts__gte=start.date(), ts__lte=end.date())
f1 = pd.DataFrame(list(f1.values())).set_index('ts').astype('float').dropna()
f1.index = pd.to_datetime(f1.index.date)
f2 = Stock.objects.get(ticker=pair[1]).stockprice_set.filter(ts__gte=start.date(), ts__lte=end.date())
f2 = pd.DataFrame(list(f2.values())).set_index('ts').astype('float').dropna()
f2.index = pd.to_datetime(f2.index.date)
commonidx = f1.index.intersection(f2.index)
f1 = f1.loc[commonidx]
f2 = f2.loc[commonidx]
T = (end-start).days / 252
corr = getcorr(f1, f2, T)
corr.append(' / '.join(list(pair)))
rhodata.append(corr)
spotdata = []
for spot in list(set(spot1+spot2)):
spotval = Stock.objects.get(ticker=spot).stockprice_set.filter(ts__gte=start.date(), ts__lte=end.date())
spotval = pd.DataFrame(list(spotval.values()))
spotval = spotval.set_index('ts').astype('float').dropna()
spotval.index = pd.to_datetime(spotval.index.date)
spotdata.append([spotval, spot])
instcorrdiv = instvol.myplotly.getcorrdiv(rhodata)
hiscorrdiv = instvol.myplotly.getcorrdiv(rhodata, isHis=1)
spotdiv = instvol.myplotly.getspotdiv(spotdata)
form = UploadFileForm()
template = loader.get_template('instvol/correlation.html')
context = {'plot_div_inst': instcorrdiv, 'plot_div_his': hiscorrdiv, 'plot_div_spot': spotdiv, 'ticker_list': tickers, 'form': form}
return HttpResponse(template.render(context, request))
和forms.py:
来自django导入表单
class UploadFileForm(forms.Form):
# title = forms.CharField(max_length=50)
file = forms.FileField()
问题是,当在没有给出参数的情况下首先加载页面时,
correlation()
中的if...else
语句进入else
部分,并且request.GET.getlist('field-a')
和request.GET.getlist('field-b')
失败,导致form
未被描述因此,我对views.py进行如下修改:
相关问题 更多 >
编程相关推荐