##// END OF EJS Templates
- Estandarizada la funcion de importar archivos ABS para utilizar el mismo formato de manejo de perfiles.
jsalyrosas -
r183:184
parent child
Show More
@@ -0,0 +1,23
1 {% extends "abscontrol/index.html" %}
2 {% block title %}ABS CONTROL:::::IMPORT PROFILE{% endblock %}
3 {% block scripting %}
4 <script src="/static/static/js/profiles.js"></script>
5 {% endblock %}
6 {% block mnu_profile %}
7 <nav class="MnuHorizontal" id="mnuProfiles">
8 <ul>
9 <li><a href="/abscontrol/new">New</a></li>
10 <li><a href="/abscontrol/import">Import</a></li>
11 </ul>
12 </nav>
13 {% endblock %}
14 {% block maincolumn %}
15 <div id="maincolumn">
16 <div id="divPattern">
17 <div class="divUes">
18 <label for="lblError">Error:</label>
19 <p>{{ txtError }}</p>
20 </div>
21 </div>
22 </div>
23 {% endblock %}
@@ -1,25 +1,25
1 1 from django.conf.urls import patterns, url
2 2
3 3 urlpatterns = patterns('abscontrol.views',
4 4 url(r'^$', 'index'),
5 5 url(r'^new/$', 'new'),
6 6 url(r'^save/$', 'save'),
7 7 url(r'^view/(?P<profile_id>\d+)/$', 'view'),
8 8 url(r'^edit/(?P<profile_id>\d+)/$', 'edit'),
9 9 url(r'^update/(?P<profile_id>\d+)/$', 'update'),
10 10 url(r'^changeName/(?P<profile_id>\d+)/$', 'changeName'),
11 11 #url(r'^(?P<profile_id>\d+)/$', 'detail'),
12 12 url(r'^(?P<profile_id>\d+)/add/$', 'addPattern'),
13 13 url(r'^(?P<profile_id>\d+)/save/$', 'savePattern'),
14 14 url(r'^(?P<profile_id>\d+)/edit/(?P<pattern_id>\d+)/$', 'editPattern'),
15 15 url(r'^(?P<profile_id>\d+)/view/(?P<pattern_id>\d+)/$', 'viewPattern'),
16 16 url(r'^(?P<profile_id>\d+)/delete/(?P<pattern_id>\d+)/$', 'deletePattern'),
17 17 #url(r'^(?P<poll_id>\d+)/results/$', 'results'),
18 18 #url(r'^(?P<poll_id>\d+)/vote/$', 'vote'),
19 19 url(r'^import/$', 'importProfile'),
20 url(r'^showImport/$', 'showImport'),
21 url(r'^saveImport/$', 'saveImport'),
20 url(r'^upload/$', 'upload'),
21 #url(r'^saveImport/$', 'saveImport'),
22 22 url(r'^(?P<profile_id>\d+)/(?P<pattern_id>\d+)/overjro/(?P<antenna_id>\d+)/$', 'overJRO'),
23 23 url(r'^export/(?P<profile_id>\d+)/$', 'export'),
24 24 url(r'^send/(?P<profile_id>\d+)/$', 'send'),
25 25 ) No newline at end of file
@@ -1,424 +1,409
1 1 from django.shortcuts import render_to_response, redirect
2 2 from django.http import HttpResponse
3 3 from django.conf import settings
4 4 from django.utils.encoding import smart_str
5 5 from django.core.servers.basehttp import FileWrapper
6 6 import mimetypes
7 7
8 8 from datetime import datetime
9 9
10 10 from abscontrol.models import Profile, Pattern, AntennaDown, AntennaUp
11 11
12 12 from util.readABSFile import readABSFile
13 13 from util.saveABSFile import saveABSFile
14 14 from scripts.sendFile import sendFile
15 15
16 16 txtAntenna = "[[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \
17 17 "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \
18 18 "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \
19 19 "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \
20 20 "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \
21 21 "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \
22 22 "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \
23 23 "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]]"
24 24
25 25 txtTxUp = "[[1,1,1,1,1,1,1,1]," \
26 26 "[1,1,1,1,1,1,1,1]," \
27 27 "[1,1,1,1,1,1,1,1]," \
28 28 "[1,1,1,1,1,1,1,1]," \
29 29 "[1,1,1,1,1,1,1,1]," \
30 30 "[1,1,1,1,1,1,1,1]," \
31 31 "[1,1,1,1,1,1,1,1]," \
32 32 "[1,1,1,1,1,1,1,1]]"
33 33
34 34 txtTxDown = "[[1,1,1,1,0,0,0,0]," \
35 35 "[1,1,1,1,0,0,0,0]," \
36 36 "[1,1,1,1,0,0,0,0]," \
37 37 "[1,1,1,1,0,0,0,0]," \
38 38 "[0,0,0,0,1,1,1,1]," \
39 39 "[0,0,0,0,1,1,1,1]," \
40 40 "[0,0,0,0,1,1,1,1]," \
41 41 "[0,0,0,0,1,1,1,1]]"
42 42
43 43 txtRxUp = "[[0,0,0,0,1,1,1,1]," \
44 44 "[0,0,0,0,1,1,1,1]," \
45 45 "[0,0,0,0,1,1,1,1]," \
46 46 "[0,0,0,0,1,1,1,1]," \
47 47 "[1,1,1,1,1,1,1,1]," \
48 48 "[1,1,1,1,1,1,1,1]," \
49 49 "[1,1,1,1,1,1,1,1]," \
50 50 "[1,1,1,1,1,1,1,1]]"
51 51
52 52 txtRxDown = "[[1,1,1,1,1,1,1,1]," \
53 53 "[1,1,1,1,1,1,1,1]," \
54 54 "[1,1,1,1,1,1,1,1]," \
55 55 "[1,1,1,1,1,1,1,1]," \
56 56 "[1,1,1,1,1,1,1,1]," \
57 57 "[1,1,1,1,1,1,1,1]," \
58 58 "[1,1,1,1,1,1,1,1]," \
59 59 "[1,1,1,1,1,1,1,1]]"
60 60
61 61 txtUes = "[0.533333,0.00000,1.06667,0.00000]"
62 62
63 63 def index(request):
64 64 #latest_poll_list = profileAntenna.objects.all().order_by('-pub_date')[:5]
65 65 profile_list = Profile.objects.filter(state=1)
66 66 return render_to_response('abscontrol/index.html', {'profile_list': profile_list})
67 67
68 68 def new(request):
69 69 profile_list = Profile.objects.filter(state=1)
70 70 txtProfile = datetime.now().strftime("%Y%m%d%H%M%S%f")
71 71 newprofile = Profile(name=txtProfile)
72 72 newprofile.save()
73 73
74 74 lsPatterns = None
75 75
76 76 return render_to_response('abscontrol/new.html', {'profile_list': profile_list,
77 77 'txtAntenna' : txtAntenna,
78 78 'profile_name' : newprofile.name,
79 79 'profile_id' : newprofile.id,
80 80 'lsPatterns' : lsPatterns,
81 81 'txtUes' : txtUes, 'txtTxUp' : txtTxUp,
82 82 'txtTxDown' : txtTxDown, 'txtRxUp' : txtRxUp,
83 83 'txtRxDown' : txtRxDown,
84 84 })
85 85
86 86 def save(request):
87 87
88 88 txtProfile = request.POST["txtProfile"]
89 89
90 90 txtAntennaUp = request.POST["txtAntennaUp"]
91 91 txtTxUp = request.POST["txtTxUp"]
92 92 txtRxUp = request.POST["txtRxUp"]
93 93 txtUesUp = request.POST["txtUesUp"]
94 94
95 95 txtAntennaDown = request.POST["txtAntennaDown"]
96 96 txtTxDown = request.POST["txtTxDown"]
97 97 txtRxDown = request.POST["txtRxDown"]
98 98 txtUesDown = request.POST["txtUesDown"]
99 99
100 100 newprofile = Profile(name=txtProfile)
101 101 newprofile.save()
102 102
103 103 newpattern = newprofile.pattern_set.create(value=1)
104 104 newpattern.antennaup_set.create(value=txtAntennaUp,tx=txtTxUp,rx=txtRxUp,ues=txtUesUp)
105 105 newpattern.antennadown_set.create(value=txtAntennaDown,tx=txtTxDown,rx=txtRxDown,ues=txtUesDown)
106 106
107 107 newurl = '/abscontrol/view/%d' % newprofile.id
108 108
109 109 return redirect(newurl)
110 110
111 111 def update(request, profile_id):
112 112 txtProfile = request.POST["txtProfile"]
113 113
114 114 objProfile = Profile.objects.get(pk=profile_id)
115 115 objProfile.name = txtProfile
116 116 objProfile.state = 1
117 117 objProfile.save()
118 118
119 119 newurl = '/abscontrol/view/%d' % objProfile.id
120 120 return redirect(newurl)
121 121
122 122 def changeName(request, profile_id):
123 123 profile_list = Profile.objects.filter(state=1)
124 124 objProfile = Profile.objects.get(pk=profile_id)
125 125 lsPatterns = objProfile.pattern_set.all()
126 126
127 127 return render_to_response('abscontrol/changeName.html', {'profile_list': profile_list,
128 128 'objProfile': objProfile,
129 129 'lsPatterns' : lsPatterns,
130 130 })
131 131
132 132 def view(request, profile_id):
133 133 nextPattern = 0
134 134
135 135 if request.method == 'GET' and 'pattern' in request.GET:
136 136 pattern_value = request.GET["pattern"]
137 137 else:
138 138 pattern_value = 1
139 139
140 140 profile_list = Profile.objects.filter(state=1)
141 141 objProfile = Profile.objects.get(pk=profile_id)
142 142
143 143 lsPatterns = objProfile.pattern_set.all()
144 144 patternChoosen = objProfile.pattern_set.get(value=pattern_value)
145 145 objAntennaUp = patternChoosen.antennaup_set.get()
146 146 objAntennaDown = patternChoosen.antennadown_set.get()
147 147
148 148 if len(lsPatterns) > 1:
149 149 if pattern_value == 1:
150 150 nextValuePattern = pattern_value + 1
151 151 nextPattern = objProfile.pattern_set.get(value=nextValuePattern)
152 152
153 153
154 154 return render_to_response('abscontrol/view.html', {'objProfile': objProfile, 'profile_list': profile_list,
155 155 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns,
156 156 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown,
157 157 'nextPattern' : nextPattern,
158 158 })
159 159
160 160 def edit(request, profile_id):
161 161 if request.method == 'GET' and 'pattern' in request.GET:
162 162 pattern_value = request.GET["pattern"]
163 163 else:
164 164 pattern_value = 1
165 165
166 166 profile_list = Profile.objects.filter(state=1)
167 167 objProfile = Profile.objects.get(pk=profile_id)
168 168
169 169 lsPatterns = objProfile.pattern_set.all()
170 170 patternChoosen = objProfile.pattern_set.get(value=pattern_value)
171 171 objAntennaUp = patternChoosen.antennaup_set.get()
172 172 objAntennaDown = patternChoosen.antennadown_set.get()
173 173
174 174 return render_to_response('abscontrol/edit.html', {'objProfile': objProfile, 'profile_list': profile_list,
175 175 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns,
176 176 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown,
177 177 })
178 178
179 179 def addPattern(request, profile_id):
180 180 profile_list = Profile.objects.filter(state=1)
181 181 objProfile = Profile.objects.get(pk=profile_id)
182 182
183 183 return render_to_response('abscontrol/addPattern.html', {'objProfile': objProfile, 'profile_list': profile_list,
184 184 'txtAntenna' : txtAntenna, 'txtUes' : txtUes,
185 185 'txtTxUp' : txtTxUp, 'txtTxDown' : txtTxDown,
186 186 'txtRxUp' : txtRxUp, 'txtRxDown' : txtRxDown,
187 187 })
188 188
189 189 def editPattern(request, profile_id, pattern_id):
190 190 profile_list = Profile.objects.filter(state=1)
191 191 objProfile = Profile.objects.get(pk=profile_id)
192 192 lsPatterns = objProfile.pattern_set.all()
193 193 patternChoosen = Pattern.objects.get(pk=pattern_id)
194 194 objAntennaUp = patternChoosen.antennaup_set.get()
195 195 objAntennaDown = patternChoosen.antennadown_set.get()
196 196
197 197 return render_to_response('abscontrol/editPattern.html', {'objProfile': objProfile, 'profile_list': profile_list,
198 198 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns,
199 199 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown,
200 200 })
201 201
202 202 def savePattern(request, profile_id):
203 203 pattern_id = 0
204 204 method = "save"
205 205
206 206 if 'pattern_id' in request.POST:
207 207 pattern_id = request.POST["pattern_id"]
208 208 method = "update"
209 209
210 210 maxValuePattern = 0
211 211 txtAntennaUp = request.POST["txtAntennaUp"]
212 212 txtTxUp = request.POST["txtTxUp"]
213 213 txtRxUp = request.POST["txtRxUp"]
214 214 txtUesUp = request.POST["txtUesUp"]
215 215
216 216 txtAntennaDown = request.POST["txtAntennaDown"]
217 217 txtTxDown = request.POST["txtTxDown"]
218 218 txtRxDown = request.POST["txtRxDown"]
219 219 txtUesDown = request.POST["txtUesDown"]
220 220
221 221 mode = request.POST["mode"]
222 222
223 223 if method == "save":
224 224 objProfile = Profile.objects.get(pk=profile_id)
225 225 lsPatterns = objProfile.pattern_set.all()
226 226 if len(lsPatterns) > 0:
227 227 for element in lsPatterns:
228 228 if element.value > maxValuePattern:
229 229 maxPattern = element.value
230 230 else:
231 231 maxPattern = 0
232 232
233 233 if maxPattern < 10 :
234 234 newValuePattern = maxPattern + 1
235 235 newpattern = objProfile.pattern_set.create(value=newValuePattern)
236 236 newpattern.antennaup_set.create(value=txtAntennaUp,tx=txtTxUp,rx=txtRxUp,ues=txtUesUp)
237 237 newpattern.antennadown_set.create(value=txtAntennaDown,tx=txtTxDown,rx=txtRxDown,ues=txtUesDown)
238 238 error = 0
239 239 else:
240 240 error = 1 # Can not add more patterns
241 241
242 242 if mode == "e":
243 243 newurl = '/abscontrol/%d/edit/%d' % (int(profile_id), newpattern.id)
244 244 else:
245 245 newurl = '/abscontrol/%d/view/%d' % (int(profile_id), newpattern.id)
246 246 else:
247 247 txtAntennaUpId = request.POST["txtAntennaUpId"]
248 248 objAntennaUp = AntennaUp.objects.get(pk=txtAntennaUpId)
249 249 objAntennaUp.value = txtAntennaUp
250 250 objAntennaUp.tx = txtTxUp
251 251 objAntennaUp.rx = txtRxUp
252 252 objAntennaUp.ues = txtUesUp
253 253 objAntennaUp.save()
254 254
255 255 txtAntennaDownId = request.POST["txtAntennaDownId"]
256 256 objAntennaDown = AntennaDown.objects.get(pk=txtAntennaDownId)
257 257 objAntennaDown.value = txtAntennaDown
258 258 objAntennaDown.tx = txtTxDown
259 259 objAntennaDown.rx = txtRxDown
260 260 objAntennaDown.ues = txtUesDown
261 261 objAntennaDown.save()
262 262
263 263 if mode == "e":
264 264 newurl = '/abscontrol/%d/edit/%d' % (int(profile_id), int(pattern_id))
265 265 else:
266 266 newurl = '/abscontrol/%d/view/%d' % (int(profile_id), int(pattern_id))
267 267
268 268 return redirect(newurl)
269 269
270 270 def viewPattern(request, profile_id, pattern_id):
271 271
272 272 profile_list = Profile.objects.filter(state=1)
273 273 objProfile = Profile.objects.get(pk=profile_id)
274 274
275 275 patternChoosen = Pattern.objects.get(pk=pattern_id)
276 276
277 277 objAntennaUp = patternChoosen.antennaup_set.get()
278 278 objAntennaDown = patternChoosen.antennadown_set.get()
279 279
280 280 lsPatterns = objProfile.pattern_set.all()
281 281
282 282 return render_to_response('abscontrol/viewPattern.html', {'objProfile': objProfile, 'profile_list': profile_list,
283 283 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns,
284 284 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown,
285 285 })
286 286
287 287 def deletePattern(request, profile_id, pattern_id):
288 288 newurl = '/abscontrol/edit/%d' % int(profile_id)
289 289
290 290 return redirect(newurl)
291 291
292 292 def importProfile(request):
293 293 profile_list = Profile.objects.filter(state=1)
294 294 return render_to_response('abscontrol/import.html', {'profile_list': profile_list,})
295 295
296 def showImport(request):
296 def upload(request):
297 297 profile_list = Profile.objects.filter(state=1)
298 298 if request.method == 'POST':
299 299 txtFilename = request.FILES['txtFile']
300 300 if txtFilename:
301 301 destination = open('/tmp/'+txtFilename.name, 'wb+')
302 302 for chunk in txtFilename.chunks():
303 303 destination.write(chunk)
304 304 destination.close()
305 305 filename = '/tmp/'+txtFilename.name
306 306 readFile = readABSFile(filename)
307 307 expName, num_patterns, patterns = readFile.getMetadata()
308 else:
309 txtFilename = "Error"
310 #content = "Error"
311 expName = ""
312 num_patterns = 0
308
309 if expName != "" and num_patterns > 0:
310 newprofile = Profile(name=expName)
311 newprofile.save()
312 newprofile.state = 1
313
314 for element in patterns:
315 newpattern = newprofile.pattern_set.create(value=element["number"])
316 newpattern.antennaup_set.create(value=element["up"])
317 newpattern.antennadown_set.create(value=element["down"])
318
319 newprofile.save()
320
321 newurl = '/abscontrol/edit/%d' % int(newprofile.id)
322 return redirect(newurl)
323 else:
324 txtError = "Experiment's name not found or the number of patterns is 0."
325 return render_to_response('abscontrol/error.html', {'profile_list': profile_list,
326 'txtError' : txtError, })
327 else:
328 txtError = "No file."
313 329
314 return render_to_response('abscontrol/upload-edit.html', {'txtFilename': txtFilename, 'patterns' : patterns,
315 'expName' : expName, 'num_patterns' : num_patterns,
316 'profile_list': profile_list,
317 })
318
319 def saveImport(request):
320 patterns = []
321
322 expName = request.POST["txtProfile"]
323 num_patterns = int(request.POST["txtNumPatterns"])
324
325 newprofile = Profile(name=expName)
326 newprofile.save()
327
328 for i in range(0,num_patterns):
329 number = request.POST["txtNumberPattern"+str(i+1)]
330 txtAntennaUp = request.POST["txtAntennaUp"+str(i+1)]
331 txtAntennaDown = request.POST["txtAntennaDown"+str(i+1)]
332 dicPattern = {"number" : number, "up" : txtAntennaUp, "down" : txtAntennaDown}
333 patterns.append(dicPattern)
334 newpattern = newprofile.pattern_set.create(value=number)
335 newpattern.antennaup_set.create(value=txtAntennaUp)
336 newpattern.antennadown_set.create(value=txtAntennaDown)
337
338 newurl = '/abscontrol/view/%d' % newprofile.id
339
340 return redirect(newurl)
341 '''
342 return render_to_response('abscontrol/upload-view.html', {'expName' : expName, 'patterns' : patterns,
343 'num_patterns' : num_patterns,
344 })
345 '''
330 return render_to_response('abscontrol/error.html', {'profile_list': profile_list, 'txtError' : txtError, })
346 331
347 332 def overJRO(request, profile_id, pattern_id, antenna_id):
348 333 if request.GET["beam"] == "Up":
349 334 objAntenna = AntennaUp.objects.get(pk=antenna_id)
350 335 else:
351 336 objAntenna = AntennaDown.objects.get(pk=antenna_id)
352 337 objProfile = Profile.objects.get(pk=profile_id)
353 338 exp_name = objProfile.name
354 339
355 340 phase_tx = objAntenna.value
356 341 gain_tx = objAntenna.tx
357 342 gain_rx = objAntenna.rx
358 343 ues_tx = objAntenna.ues
359 344 only_rx = objAntenna.only_rx
360 345
361 346 return exp_name, phase_tx, gain_tx, gain_rx, ues_tx, only_rx
362 347
363 348 def export(request, profile_id):
364 349 listPatterns = []
365 350 objProfile = Profile.objects.get(pk=profile_id)
366 351 exp_name = objProfile.name
367 352 lsPatterns = objProfile.pattern_set.all()
368 353 for element in lsPatterns:
369 354 objAntennaUp = element.antennaup_set.get()
370 355 objAntennaDown = element.antennadown_set.get()
371 356 dicPatterns = {"number" : element.value, "up" : objAntennaUp.value, "down" : objAntennaDown.value}
372 357 listPatterns.append(dicPatterns)
373 358
374 359 absFile = saveABSFile()
375 360 absFile.setParameters(settings.MEDIA_ROOT, exp_name, listPatterns)
376 361 filename, filesize = absFile.save()
377 362
378 363 wrapper = FileWrapper( open( filename, "r" ) )
379 364 content_type = mimetypes.guess_type( filename )[0]
380 365
381 366 response = HttpResponse(wrapper, content_type = content_type)
382 367 response['Content-Description'] = 'File Transfer'
383 368 response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(filename)
384 369 response['Content-Transfer-Encoding'] = 'binary'
385 370 response['Expires'] = '0'
386 371 response['Cache-Control'] = 'must-revalidate'
387 372 response['Pragma'] = 'public'
388 373 response['Content-Length'] = '%s' % str(filesize)
389 374 response['X-Sendfile'] = '%s' % smart_str(filename)
390 375
391 376 return response
392 377
393 378 def send(request, profile_id):
394 379 listPatterns = []
395 380 objProfile = Profile.objects.get(pk=profile_id)
396 381 exp_name = objProfile.name
397 382
398 383 lsPatterns = objProfile.pattern_set.all()
399 384 for element in lsPatterns:
400 385 objAntennaUp = element.antennaup_set.get()
401 386 objAntennaDown = element.antennadown_set.get()
402 387 dicPatterns = {"number" : element.value, "up" : objAntennaUp.value, "down" : objAntennaDown.value}
403 388 listPatterns.append(dicPatterns)
404 389
405 390 absFile = saveABSFile()
406 391 absFile.setParameters(settings.MEDIA_ROOT, exp_name, listPatterns)
407 392 filename, filesize = absFile.save()
408 393
409 394 apiclient = sendFile()
410 395 apiclient.execute(filename)
411 396 output = apiclient.getOutput()
412 397
413 398 if output == "OK":
414 399 message = "File sent successfully."
415 400 objProfile.hits += 1
416 401 objProfile.save()
417 402 else:
418 403 message = "Error sending file."
419 404
420 405 profile_list = Profile.objects.all()
421 406
422 407 return render_to_response('abscontrol/sendFile.html', {'message': message, "profile_list" : profile_list,
423 408 'objProfile': objProfile,
424 409 })
@@ -1,23 +1,23
1 1 {% extends "abscontrol/index.html" %}
2 2 {% block title %}ABS CONTROL:::::IMPORT PROFILE{% endblock %}
3 3
4 4 {% block mnu_profile %}
5 5 <nav class="MnuHorizontal" id="mnuProfiles">
6 6 <ul>
7 7 <li><a href="#" id="lnkUpload">Upload</a></li>
8 8 <li><a href="#" id="lnkCancel">Cancel</a></li>
9 9 </ul>
10 10 </nav>
11 11 {% endblock %}
12 12 {% block maincolumn %}
13 13 <div id="maincolumn">
14 <form name="frmImport" id="frmImport" action="/abscontrol/showImport/" method="post" enctype="multipart/form-data">
14 <form name="frmImport" id="frmImport" action="/abscontrol/upload/" method="post" enctype="multipart/form-data">
15 15 <div id="divPattern">
16 16 <div class="divUes">
17 17 <label for="lblFile">Choose File:</label>
18 18 <input type="file" name="txtFile" />
19 19 </div>
20 20 </div>
21 21 </form>
22 22 </div>
23 23 {% endblock %} No newline at end of file
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now