X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=django_simple%2Ftodo%2Fviews.py;h=2db518664d36db39ed3ac248ba04ad93413e8b3f;hb=e859527fb1708004e7389b4e782840edcedd0376;hp=7e1903e44924e79fa58bc8e87c946671b6c5a1ae;hpb=635b383e5b321c2aabb15b072ff0899bea69bda2;p=django_unres.git diff --git a/django_simple/todo/views.py b/django_simple/todo/views.py index 7e1903e..2db5186 100644 --- a/django_simple/todo/views.py +++ b/django_simple/todo/views.py @@ -20,16 +20,75 @@ res_codes = [ ('HSD', 'H'),('HSE', 'H'),('HSP', 'H'), ('HIE', 'H'), ('HID', 'H'),('HIP', 'H'), ('CYX', 'C'), + ('DCY', 'c'), ('DAS', 'd'), ('DSN', 's'), ('DGN', 'q'), + ('DLY', 'k'), ('DIL', 'i'), ('DPR', 'p'), ('DTH', 't'), + ('DPN', 'f'), ('DSG', 'n'), ('DHI', 'h'), + ('DLE', 'l'), ('DAR', 'r'), ('DTR', 'w'), ('DAL', 'a'), + ('DVA', 'v'), ('DGL', 'e'), ('DTY', 'y'), ('MED', 'm'), ] three_to_one = dict(res_codes) +def load_pdbid(pdbid,dirname): + os.mkdir(dirname) + if len(pdbid)==4: + file,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb', + dirname+'/plik.pdb') + else: + chain=pdbid[5] + pdbid=pdbid[:4] + pdb_tmp=urllib.urlopen('http://files.rcsb.org/download/'+pdbid+'.pdb') + with open(dirname+'/plik.pdb', 'w') as outfile: + for line in pdb_tmp: + if line[0:6] == 'SSBOND' and line[15] == chain and line[29] == chain: + outfile.write(line) + if line[0:6] == 'ATOM ' and line[21] == chain: + outfile.write(line) + pdb_tmp.close() + file=dirname+'/plik.pdb' + + return(file) + + +def seq_2d_from_pdb(seq_2d,seq): + if seq_2d =='': + return(seq_2d) + seq_2d=seq_2d.replace('C', '-') + seq_2d_tmp='' + ii=0 + for i in range(0,len(seq)): + if seq[i]=='X': + seq_2d_tmp=seq_2d_tmp+'-' + else: + if len(seq_2d)>ii: + seq_2d_tmp=seq_2d_tmp+seq_2d[ii] + ii+=1 + tmp='' + for i in range(0,len(seq_2d_tmp),40): + tmp=tmp+seq_2d_tmp[i:i+40]+" " + return(tmp) + +def seq_2d_add_x(seq_2d,seq,seq_form): + if seq_2d =='': + return(seq_2d) + seq_2d=seq_2d[:len(seq_form)] + seq_2d=seq_2d.replace('C', '-') + if seq_form[0] !='X' and seq[0] == 'X': + seq_2d='-'+seq_2d + if seq_form[-1] !='X' and seq[-1] == 'X': + seq_2d=seq_2d+'-' + seq_2d=seq_2d[:len(seq)] + tmp='' + for i in range(0,len(seq_2d),40): + tmp=tmp+seq_2d[i:i+40]+" " + return(tmp) + def seq_add_x(sequence): - if sequence[0] != 'G': + if sequence[0] != 'G' and sequence[0] != 'g' and sequence[0] != 'X': sequence='X'+sequence - if sequence[-1] != 'G': + if sequence[-1] != 'G' and sequence[-1] != 'g' and sequence[-1] != 'X': sequence=sequence+'X' - set ='CDSQKIPTFNGHLRWAVEYMX' + set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnhlrwaveym' sequence = ''.join([c for c in sequence if c in set]) return(sequence) @@ -42,32 +101,24 @@ def from_pdb(file): chain_start = {} chain_end = {} unres_shift = {} - chain=[] - ichain=0 + chain_sorted=[] newchain = True - + i='' for line in file: - if line[0:6] == 'COMPND' and line[11:17] == 'CHAIN:': - tmp=line[18:] - chain_=tmp.split(', ') - chain_[-1]=chain_[-1][0] - chain.extend(chain_) - if line[0:6] == 'ATOM ' and line[13:15] == 'CA': aa = three_to_one.get(line[17:20]) i = int(line[22:26]) + ch = line[21:22] if newchain or i!=ires[-1]: sequence.append(aa) ires.append(i) if newchain: - if len(chain)>0: - chain_start[chain[ichain]]=i + chain_start[ch]=i + chain_sorted.extend(ch) newchain = False - if line[0:3] == 'TER': + if line[0:3] == 'TER' and i != '': sequence.append('XX') - if len(chain)>0: - chain_end[chain[ichain]]=i - ichain=ichain+1 + chain_end[ch]=i newchain = True if line[0:6] == 'SSBOND': b=[] @@ -80,6 +131,8 @@ def from_pdb(file): ssbond_ch.append(c) if line[0:3] == 'END': break + if not sequence[-1] == 'XX': + chain_end[ch]=i while sequence[-1] == 'XX': del sequence[-1] if sequence[0] != 'G': @@ -91,7 +144,7 @@ def from_pdb(file): # if ires[0] != 1: # ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond] i=0 - for c in chain: + for c in chain_sorted: unres_shift[c]=i+chain_start[c] i=i-(chain_end[c]-chain_start[c])-3 ssbond=[ [e[0]-unres_shift[c[0]]+1,e[1]-unres_shift[c[1]]+1] for e,c in zip(ssbond,ssbond_ch)] @@ -105,10 +158,10 @@ def index(request): tasks = Task.objects.filter(owner=user).order_by('-created_date') variable = '' return render(request, "index.html", { - 'tasks': tasks + 'tasks': tasks, 'alldone': 0 }) -@allow_lazy_user +@login_required def add(request): if request.method == 'POST': form = TaskForm(request.POST) @@ -124,11 +177,25 @@ def add(request): def add_min(request,task_id): task = get_object_or_404(Task, id=task_id) if request.method == 'POST': + if '_example' in request.POST: + data= {'name':task.name,'pdbid':'1BDD'} + form = TaskForm_min(initial=data) + else: form = TaskForm_min(request.POST,request.FILES) if form.is_valid(): task.name=form.cleaned_data["name"] task.type="min" - task.myfile1=form.cleaned_data["file1"] + pdbid=form.cleaned_data["pdbid"] + + basename = str(task.owner) + suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") + task.jobdirname = "_".join([basename, suffix]) + + if pdbid: + task.myfile1=load_pdbid(pdbid,task.jobdirname) + task.pdbcode=pdbid + else: + task.myfile1=form.cleaned_data["file1"] seq,task.ssbond=from_pdb(task.myfile1) task.md_seq="" @@ -136,13 +203,10 @@ def add_min(request,task_id): task.md_seq=task.md_seq+seq[i:i+40]+" " task.ready=True - basename = str(task.owner) - suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") - task.jobdirname = "_".join([basename, suffix]) task.save() if is_lazy_user(request.user): - return render(request, "details.html",{'task':task}) + return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/') else: return redirect('/') else: @@ -156,17 +220,32 @@ def add_min(request,task_id): def add_min_a(request,task_id): task = get_object_or_404(Task, id=task_id) if request.method == 'POST': + if '_example' in request.POST: + data= {'name':task.name,'pdbid':'1EI0','unres_ff':'opt-wtfsa-2'} + form = TaskForm_min_a(initial=data) + else: form = TaskForm_min_a(request.POST,request.FILES) if form.is_valid(): task.name=form.cleaned_data["name"] task.type="min" - task.min_choice=form.cleaned_data["min_choice"] +# task.min_choice=form.cleaned_data["min_choice"] task.min_overlap=form.cleaned_data["min_overlap"] task.min_searchsc=form.cleaned_data["min_searchsc"] task.min_maxmin=form.cleaned_data["min_maxmin"] task.min_maxfun=form.cleaned_data["min_maxfun"] task.min_pdbout=form.cleaned_data["min_pdbout"] - task.myfile1=form.cleaned_data["file1"] + + basename = str(task.owner) + suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") + task.jobdirname = "_".join([basename, suffix]) + + pdbid=form.cleaned_data["pdbid"] + if pdbid: + task.myfile1=load_pdbid(pdbid,task.jobdirname) + task.pdbcode=pdbid + else: + task.myfile1=form.cleaned_data["file1"] + task.min_unres_pdb=form.cleaned_data["min_unres_pdb"] task.unres_ff=form.cleaned_data["unres_ff"] task.boxx=form.cleaned_data["boxx"] @@ -178,15 +257,11 @@ def add_min_a(request,task_id): for i in range(0,len(seq),40): task.md_seq=task.md_seq+seq[i:i+40]+" " - task.ready=True - basename = str(task.owner) - suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") - task.jobdirname = "_".join([basename, suffix]) task.save() if is_lazy_user(request.user): - return render(request, "details.html",{'task':task}) + return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/') else: return redirect('/') else: @@ -200,6 +275,11 @@ def add_min_a(request,task_id): def add_md(request,task_id): task = get_object_or_404(Task, id=task_id) if request.method == 'POST': + if '_example' in request.POST: + data= {'name':task.name,'pdbid':'1IGD','md_start':'pdbstart', + 'md_pdbref':True,'md_temp':200} + form = TaskForm_md(initial=data) + else: form = TaskForm_md(request.POST,request.FILES) if form.is_valid(): task.name=form.cleaned_data["name"] @@ -208,8 +288,17 @@ def add_md(request,task_id): task.md_start=form.cleaned_data["md_start"] task.md_temp=form.cleaned_data["md_temp"] task.md_nstep=form.cleaned_data["md_nstep"] - - task.myfile1=form.cleaned_data["file1"] + + basename = str(task.owner) + suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") + task.jobdirname = "_".join([basename, suffix]) + + pdbid=form.cleaned_data["pdbid"] + if pdbid: + task.myfile1=load_pdbid(pdbid,task.jobdirname) + task.pdbcode=pdbid + else: + task.myfile1=form.cleaned_data["file1"] task.md_pdbref=form.cleaned_data["md_pdbref"] task.md_seq="" @@ -225,13 +314,10 @@ def add_md(request,task_id): task.ssbond='' task.ready=True - basename = str(task.owner) - suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") - task.jobdirname = "_".join([basename, suffix]) task.save() if is_lazy_user(request.user): - return render(request, "details.html",{'task':task}) + return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/') else: return redirect('/') else: @@ -245,20 +331,37 @@ def add_md(request,task_id): def add_md_a(request,task_id): task = get_object_or_404(Task, id=task_id) if request.method == 'POST': + if '_example' in request.POST: + data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf', + 'md_pdbref':True,'md_mdpdb':True} + form = TaskForm_md_a(initial=data) + else: form = TaskForm_md_a(request.POST,request.FILES) if form.is_valid(): task.name=form.cleaned_data["name"] task.type="md" - task.myfile1=form.cleaned_data["file1"] + basename = str(task.owner) + suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") + task.jobdirname = "_".join([basename, suffix]) + + pdbid=form.cleaned_data["pdbid"] + if pdbid: + task.myfile1=load_pdbid(pdbid,task.jobdirname) + task.pdbcode=pdbid + else: + task.myfile1=form.cleaned_data["file1"] task.md_start=form.cleaned_data["md_start"] task.md_pdbref=form.cleaned_data["md_pdbref"] task.md_seq="" if task.md_start == "pdbstart" or task.md_pdbref: seq,task.ssbond=from_pdb(task.myfile1) + task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq) else: seq=seq_add_x(form.cleaned_data["md_seq"]) + task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"]) + for i in range(0,len(seq),40): task.md_seq=task.md_seq+seq[i:i+40]+" " @@ -277,19 +380,17 @@ def add_md_a(request,task_id): task.md_scal_fric=form.cleaned_data["md_scal_fric"] task.md_mdpdb=form.cleaned_data["md_mdpdb"] task.unres_ff=form.cleaned_data["unres_ff"] + task.md_respa=form.cleaned_data["md_respa"] task.boxx=form.cleaned_data["boxx"] task.boxy=form.cleaned_data["boxy"] task.boxz=form.cleaned_data["boxz"] task.ready=True - basename = str(task.owner) - suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") - task.jobdirname = "_".join([basename, suffix]) task.save() if is_lazy_user(request.user): - return render(request, "details.html",{'task':task}) + return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/') else: return redirect('/') else: @@ -303,12 +404,26 @@ def add_md_a(request,task_id): def add_remd(request,task_id): task = get_object_or_404(Task, id=task_id) if request.method == 'POST': + if '_example' in request.POST: + data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True} + form = TaskForm_remd(initial=data) + else: form = TaskForm_remd(request.POST,request.FILES) if form.is_valid(): task.name=form.cleaned_data["name"] task.type="remd" task.md_start=form.cleaned_data["md_start"] - task.myfile1=form.cleaned_data["file1"] + + basename = str(task.owner) + suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") + task.jobdirname = "_".join([basename, suffix]) + + pdbid=form.cleaned_data["pdbid"] + if pdbid: + task.myfile1=load_pdbid(pdbid,task.jobdirname) + task.pdbcode=pdbid + else: + task.myfile1=form.cleaned_data["file1"] task.md_pdbref=form.cleaned_data["md_pdbref"] task.md_ntwx=task.remd_nstex @@ -330,13 +445,10 @@ def add_remd(request,task_id): task.ready=True - basename = str(task.owner) - suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") - task.jobdirname = "_".join([basename, suffix]) task.save() if is_lazy_user(request.user): - return render(request, "details.html",{'task':task}) + return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/') else: return redirect('/') else: @@ -348,22 +460,86 @@ def add_remd(request,task_id): @login_required def add_remd_a(request,task_id): + from django.core.files.uploadedfile import UploadedFile task = get_object_or_404(Task, id=task_id) if request.method == 'POST': + if '_example' in request.POST: + data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True, + 'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2', + 'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'} + form = TaskForm_remd_a(initial=data) + task.example='casp12' + task.save() + elif '_example_saxs' in request.POST: + data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True, + 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2', + 'remd_cluter_temp':270, + 'scal_rad':4.0,'wsaxs':100.0,'saxs_data': +""" 0.5 1.33868e-02 + 1.5 1.95880e-02 + 2.5 2.68896e-02 + 3.5 3.43737e-02 + 4.5 4.07099e-02 + 5.5 4.47875e-02 + 6.5 4.63486e-02 + 7.5 4.60514e-02 + 8.5 4.49130e-02 + 9.5 4.36744e-02 +10.5 4.26085e-02 +11.5 4.17464e-02 +12.5 4.11217e-02 +13.5 4.07835e-02 +14.5 4.06776e-02 +15.5 4.06060e-02 +16.5 4.03241e-02 +17.5 3.96655e-02 +18.5 3.85756e-02 +19.5 3.70537e-02 +20.5 3.50982e-02 +21.5 3.27236e-02 +22.5 3.00046e-02 +23.5 2.70643e-02 +24.5 2.40044e-02 +25.5 2.08595e-02 +26.5 1.76342e-02 +27.5 1.43802e-02 +28.5 1.12281e-02 +29.5 8.34574e-03 +30.5 5.87354e-03 +31.5 3.88732e-03 +32.5 2.39755e-03 +33.5 1.36323e-03 +34.5 7.06686e-04 +35.5 3.30592e-04 +36.5 1.38359e-04"""} + form = TaskForm_remd_a(initial=data) + else: form = TaskForm_remd_a(request.POST,request.FILES) if form.is_valid(): task.name=form.cleaned_data["name"] task.type="remd" - task.myfile1=form.cleaned_data["file1"] + basename = str(task.owner) + suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") + task.jobdirname = "_".join([basename, suffix]) + + pdbid=form.cleaned_data["pdbid"] + if pdbid: + task.myfile1=load_pdbid(pdbid,task.jobdirname) + task.pdbcode=pdbid + else: + task.myfile1=form.cleaned_data["file1"] task.md_start=form.cleaned_data["md_start"] task.md_pdbref=form.cleaned_data["md_pdbref"] task.md_seq="" if task.md_start == "pdbstart" or task.md_pdbref: seq,task.ssbond=from_pdb(task.myfile1) + task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq) else: seq=seq_add_x(form.cleaned_data["md_seq"]) + task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"]) + for i in range(0,len(seq),40): task.md_seq=task.md_seq+seq[i:i+40]+" " @@ -380,6 +556,7 @@ def add_remd_a(request,task_id): task.remd_nstex=form.cleaned_data["remd_nstex"] task.md_ntwx=form.cleaned_data["md_ntwx"] task.md_ntwe=form.cleaned_data["md_ntwe"] + task.md_respa=form.cleaned_data["md_respa"] # task.remd_traj1file=form.cleaned_data["remd_traj1file"] # task.remd_rest1file=form.cleaned_data["remd_rest1file"] @@ -387,13 +564,12 @@ def add_remd_a(request,task_id): task.boxy=form.cleaned_data["boxy"] task.boxz=form.cleaned_data["boxz"] - task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"] task.unres_ff=form.cleaned_data["unres_ff"] - basename = str(task.owner) - suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") - task.jobdirname = "_".join([basename, suffix]) + task.scal_rad = form.cleaned_data["scal_rad"] + task.saxs_data = form.cleaned_data["saxs_data"] + task.wsaxs = form.cleaned_data["wsaxs"] task.save() return redirect('addmlist',task_id=task.id) @@ -416,11 +592,17 @@ def addmlist(request,task_id): task.save() if is_lazy_user(request.user): - return render(request, "details.html",{'task':task}) + return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/') else: return redirect('/') else: - if task.unres_ff == 'E0LL2Y': + if task.example == 'casp12': + data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing': + '["2", "2", "2", "2", "2", "2", "2", "2"]', + 'temperatures': + '["270", "280", "290", "300", "310", "320", "330", "340"]' + } + elif task.unres_ff == 'FF2': data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing': '["1", "1", "1", "1", "1", "1", "1", "1"]', 'temperatures': @@ -437,20 +619,73 @@ def addmlist(request,task_id): p_type='replica exchange molecular dynamics - advanced options' return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type}) +@login_required def details(request,task_id): task = get_object_or_404(Task, id=task_id) return render(request, "details.html",{'task':task}) + +def details1(request,user_id,task_id): + task = get_object_or_404(Task, id=task_id) + return render(request, "details1.html",{'task':task}) + + @login_required def delete(request, task_id): Task.objects.get(id=task_id).delete() return redirect('/') +def refresh_done1(request, task_id): + task = get_object_or_404(Task, id=task_id) + user = task.owner + refresh_done0(task) + + proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE) + njob=0 + nq=0 + for line in proc.stdout: + if 'piasek4' in line: + if line.split()[1]=='test_server': + njob+=1 + if line.split()[-2]=='Q': + nq+=1 + variable='Idle jobs='+str(nq)+' Total jobs='+str(njob) + + return redirect('/details1/'+str(user)+'/'+str(task.id)+'/') + + @login_required def refresh_done(request): user = request.user tasks = Task.objects.filter(owner=user).order_by('-created_date') + alldone = 1 for task in tasks: + refresh_done0(task) + if not task.done: + alldone=0 + + proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE) + njob=0 + nq=0 + for line in proc.stdout: + if 'piasek4' in line: + if line.split()[1]=='test_server': + njob+=1 + if line.split()[-2]=='Q': + nq+=1 + variable='Idle jobs='+str(nq)+' Total jobs='+str(njob) + + if is_lazy_user(request.user): + return redirect('/details1/'+str(user)+'/'+str(task.id)+'/') + else: + return render(request, "index.html", { + 'tasks': tasks , + 'variable' : variable, + 'alldone': alldone + }) + + +def refresh_done0(task): if os.path.isfile(task.jobdirname+'/finished') and not task.done: task.done=True @@ -475,15 +710,15 @@ def refresh_done(request): elif task.type=='remd': j=0 - text="Acceptance for replica exchanges\n" + text="Acceptance for replica exchanges and number of exchange attempts\n" for line in f: if 'ACC' in line: j+=1 - text=text+line + text=text+' '.join(line.split()[2:])+"\n" if j==task.remd_nrep: j=1 - text="Acceptance for replica exchanges\n"+line + text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n" if 'Total wall' in line: text=text+line @@ -498,15 +733,15 @@ def refresh_done(request): with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f: line=f.readline() if i==1: - task.remd_model1=' '.join(line.split()[-6:]) + task.remd_model1='Cluster1 '+' '.join(line.split()[-3:]) elif i==2: - task.remd_model2=' '.join(line.split()[-6:]) + task.remd_model2='Cluster2 '+' '.join(line.split()[-3:]) elif i==3: - task.remd_model3=' '.join(line.split()[-6:]) + task.remd_model3='Cluster3 '+' '.join(line.split()[-3:]) elif i==4: - task.remd_model4=' '.join(line.split()[-6:]) + task.remd_model4='Cluster4 '+' '.join(line.split()[-3:]) elif i==5: - task.remd_model5=' '.join(line.split()[-6:]) + task.remd_model5='Cluster5 '+' '.join(line.split()[-3:]) except EnvironmentError: print 'file_wham_T*pdb open error' for i in range(1,6): @@ -574,23 +809,5 @@ def refresh_done(request): task.running=100 task.save() - proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE) - njob=0 - nq=0 - for line in proc.stdout: - if 'piasek4' in line: - if line.split()[1]=='test_server': - njob+=1 - if line.split()[-2]=='Q': - nq+=1 - variable='Idle jobs='+str(nq)+' Total jobs='+str(njob) - - if is_lazy_user(request.user): - return redirect('/details/'+str(task.id)+'/') - else: - return render(request, "index.html", { - 'tasks': tasks , - 'variable' : variable - }) -# return redirect('/') + return