2015-01-31 170 views
0

我写了一条if语句,但我不知道为什么它不起作用。`If`语句不起作用

首先“if语句”检查用户是否想用英语写一个测试(uzyt.jezyk_egzaminu == 'EN')。它应该只显示英文问题(pytanie.title)。如果计算机找不到想要写英语考试的用户,请检查其他可能性(f.e uzyt.jezyk_egzaminu == 'DE')并以其他语言显示问题。

我只在英语得到的问题:(看来一切正常在页面底部的每个用户都有说明(语言选择了DE或EN或FR)

You can check this file here

def test_qr(request): 
    # Create the HttpResponse object with the appropriate PDF headers. 
    response = HttpResponse(content_type='application/pdf') 
    response['Content-Disposition'] = 'attachment; filename="egzamin.pdf"' 

    uzyt = UserProfile.objects.all().order_by('user_id') 
    pytanie = Pytanie.objects.all().order_by('published') 
    pytanieDE = PytanieDE.objects.all().order_by('published') 
    pytanieFR = PytanieFR.objects.all().order_by('published') 

    p = canvas.Canvas(response) 

    for z, uzyt in enumerate(UserProfile.objects.all()): 

     if uzyt.jezyk_egzaminu == 'EN' : 

      for i, pytanie in enumerate(Pytanie.objects.all()): 
       p.drawString(10, 400 + i*210, ' '+ pytanie.title) 
     elif uzyt.jezyk_egzaminu == 'DE' : 
      for i, pytanieDE in enumerate(Pytanie.objects.all()): 
       p.drawString(10, 400 + i*210, ' '+ pytanieDE.title) 
     elif uzyt.jezyk_egzaminu == 'FR' : 
      for i, pytanieFR in enumerate(Pytanie.objects.all()): 
       p.drawString(10, 400 + i*210, ' '+ pytanieFR.title)   


     qrw = QrCodeWidget('http://127.0.0.1:8000/admin/userprofile/userprofile/'+str(uzyt.user_id)+'/') 
     b = qrw.getBounds() 

     w=b[2]-b[0] 
     h=b[3]-b[1] 

     d = Drawing(100, 100, transform=[100./w, 0, 0, 100./h, 0, 0]) 
     d.add(qrw) 

     renderPDF.draw(d, p, 1, 1+z*10) 
     p.drawString(100, 1 + z*10, ' '+ str(uzyt.jezyk_egzaminu)+ ' ' + str(uzyt.imie) + ' ' + str(uzyt.nazwisko) + ' '+ str(uzyt.kierunek)) 
     p.showPage() 



    p.save() 
    return response 
+0

你可以添加你得到的错误? – 2015-01-31 18:38:55

回答

2

所有你喜欢的循环

for i, pytanieDE in enumerate(Pytanie.objects.all()): 

是除循环变量的不相关的拼写完全一致的 - 在每一个情况下,你使用全部Pytanie对象,对他们没有任何选择。

所以if/elif可以完美地工作,但你永远不会知道,因为你对决策树的每一节做同样的事情 - )

你的循环变量名冲突与以前的任务:

pytanie = Pytanie.objects.all().order_by('published') 
pytanieDE = PytanieDE.objects.all().order_by('published') 
pytanieFR = PytanieFR.objects.all().order_by('published') 

并因此覆盖它们(并重复查询.objects.all())。

我想你实际上想什么做的,而不是你真正上面显示,可能是这样的:

if uzyt.jezyk_egzaminu == 'EN': 
     for i, pyt in enumerate(pytanie): 
      p.drawString(10, 400 + i*210, ' '+ pyt.title) 
    elif uzyt.jezyk_egzaminu == 'DE': 
     for i, pytDE in enumerate(pytanieDE): 
      p.drawString(10, 400 + i*210, ' '+ pytDE.title) 

等等 - 枚举你已经准备查询,并与循环变量从查询,以避免消除它们! - )

+0

当然。这很容易:)我得到了一个问题:)谢谢:) – 2015-01-31 18:48:28