2016-12-06 6 views
0

私はDjangoプロジェクトを持っていて、viewsは、データベース内のオブジェクトに関する情報を持つテーブルを表示するページをレンダリングします。表示されるオブジェクトは、viewで決定された基準に基づいて異なります。DjangoのWebページ - どの情報をテーブルに表示するかを操作する

レンダリングするページを決定するためにviewで使用if文は次のとおりです。

if request.GET.get('stage') == 'pd':   
    print "request.GET.get('stage') == 'pd' " 
    print "render_to_string() called with parameter: costing/report2_ccis.html" 
    context['html'] = render_to_string('costing/report2_ccis.html', context) 
    context['active_tab'] = '4' 

    if(project.deposit_received == True): 
     print "costing/reports_post_deposit.html is the page being rendered (project.deposit_received = true)... " 
     context['post_deposit'] = True 
     print "context['post_deposit']: ", context['post_deposit'] 
     return render(request, 'costing/reports_post_deposit.html', context) 
    elif(project.deposit_received == False): 
     print "costing/reports_pre_deposit.html is the page being rendered (project.deposit_received = False)..." 
     context['post_deposit'] = False 
     print "context['post_deposit']: ", context['post_deposit'] 
     return render(request, 'costing/reports_pre_deposit.html', context) 
else: 
    print "request.GET.get('stage') != 'pd' " 
    print "render_to_string() called with parameter: costing/report_ccis.html" 
    context['html'] = render_to_string('costing/report_ccis.html', context) 
    context['active_tab'] = '5' 
    if(project.deposit_received == True): 
     print "costing/reports_post_deposit.html is the page being rendered (project.deposit_received = true)..." 
     context['post_deposit'] = True 
     print "context['post_deposit']: ", context['post_deposit'] 
     return render(request, 'costing/reports_post_deposit.html', context) 
    elif(project.deposit_received == False): 
     print "costing/reports_pre_deposit.html is the page being rendered (project.deposit_received = false)..." 
     context['post_deposit'] = False 
     print "context['post_deposit']: ", context['post_deposit'] 
     return render(request, 'costing/reports_pre_deposit.html', context) 

viewで返さtemplatesの両方reports_tabbed.htmlと呼ばれる別のテンプレート、およびに渡されreport_ccis.html & report2_ccis.htmlテンプレートを拡張render_to_string両方を表示extendspdf2_base.htmlと呼ばれる別のテンプレート。 - (1がrender_to_stringに渡される方report_ccis.htmlまたはreport2_ccis.html)Webページ上の情報を表示していますテーブルは

pdf2_base.htmlで定義されています:私は何をしたいか

<table class="pdf-report left"> 
    {% for payment_details in payments_details %} 
     {% if forloop.first %} 

     <thead> 
      <tr> 
       {% for detail in payment_details %} 
        <th>{{ detail.0 }}</th> 
       {% endfor %} 
       <th></th> 
      </tr> 
     </thead> 
     {% endif %} 
    <tbody> 
     {% if 0 %} 
      <tr class="end-table-section"></tr> 
       <td></td> 
       <td></td> 
       <td></td> 
       <td></td> 
       <td></td> 
       <td></td> 
      </tr> 
     {% endif %} 


      <tr {% if forloop.last %}class="end-table-section last-row"{% endif %}> 


      {% for detail in payment_details %} 
       <td {% if detail.0 == 'Gross payment (£)' %}class="payment-{{detail.2}}"{% endif %}> 
       {% if detail.1 and detail.0 != 'Date paid' and detail.0 != 'Date' %} 
       {% if detail.0 == 'VAT (£)' or detail.0 == 'Scheduled payment (£)' or detail.0 == 'Gross payment (£)' %} 
        {{ detail.1|money }} 
       {% else %} 
        {{ detail.1 }} 
       {% endif %} 
       {% elif detail.1 %} 
       {{ detail.1|date:'d-M' }} 
       {% endif %} 
       </td> 
      {% endfor %} 
       <td></td> 
      </tr> 
      {% if 0 %} 
       <tr class="end-table-section"></tr> 
        <td></td> 
        <td></td> 
        <td></td> 
        <td></td> 
        <td></td> 
        <td></td> 
       </tr> 
      {% endif %} 
     {% endfor %} 
     <tr class="end-table-section"> 
      <td>Gross payment now due:</td> 
      <td>{{gross_payment_due|money:'£'}}</td> 
      <td>Current contract sum</td> 
      <td>Exc VAT {{ latest_total_exc|money:'£' }}</td> 
      <td></td> 
      <td>Bank</td> 
      <td>Handelsbanken</td> 
     </tr> 
     <tr> 
      <td></td> 
      <td></td> 
      <td>Total payments made</td> 
      <td>Exc VAT {{total_paid_exc|money:'£'}}</td> 
      <td></td> 
      <td> acc</td> 
      <td></td> 
     </tr> 
     <tr> 
      <td></td> 
      <td></td> 
      <td>Outstanding contract sum</td> 
      <td>Exc VAT {{outstanding_exc|money:'£'}}</td> 
      <td>Inc VAT {{outstanding_inc|money:'£'}}</td> 
      <td>Sort Code</td> 
      <td></td> 
     </tr> 
     <tr class="last-row"> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td colspan="2">Please ensure address is put as reference</td> 
     </tr> 
    </tbody> 
</table> 

、この表を変更でテンプレートのif(project.deposit_received == False)の条件で表示されている場合viewのテーブルの列の1つ( '最新の合計')がテーブルに表示されません...しかし、テーブルが生成された&は、Django for取得された情報に基づいて動的に変更されるためデータベースから、私はこれを行う方法がわかりません...

PythonまたはDjango/HTMLのどちらかのコードを明示的に伝える方法はありますか?特定の条件が満たされていますか?

答えて

0

最初に、コンテキストを介していくつかの変数をテンプレートに渡して、それがデポの前または後であるかどうかを確認できます。

{% if post_deposit %} 
    do_something 
{% else %} 
    do_something_else 
{% endif %} 

そして、あなたはforloop.counterを使用してテンプレートにサイクルの現在の反復をチェックすることができ、最後の1:

if(project.deposit_received == True): 
    context['post_deposit'] = True 
    return render(request, 'costing/reports_post_deposit.html', context) 
elif(project.deposit_received == False): 
    context['post_deposit'] = False 
    return render(request, 'costing/reports_pre_deposit.html', context) 

は、だから今yoouは、テンプレートでこの値をチェックする必要があります。あなたはpost_depositテーブルの3番目の列を削除する必要がある場合たとえば、あなたが3に等しいループカウンタかどうかを確認し、スキップすることができ、反復は:

{% for detail in payment_details %} 
    {% if not post_deposit or forloop.counter != 3 %} 
     <th>{{ detail.0 }}</th> 
    {% endif %} 
{% endfor %} 
+0

ねえ、おかげで、更新のために、私はこれはGO-を与え、それが削除されていながら、 'deposit_received'変数が' False'のときはその列を、変数が 'True'のときはそれを削除するので、列はもはや表示されなくなりました。私が調べる必要があると思います今の状態に関して - 私のデバッグはこの変数の値をページをロードするたびに表示しています - この変数の値を 'True'または' False'に設定するプロジェクトでロードするかどうかは決して決まりません表示されます... – someone2088

+0

@ someone2088テンプレートの値をチェックしましたか?テンプレート '{{post_deposit}}'に追加するだけです。これは 'post_deposit'の変更かどうかを示します。変数が変わっているのを見たら、あなたの質問のコードを編集してください。私は見ていきます。 – neverwalkaloner

+0

私のテンプレートからの出力は見えません( '{{post_deposit}}'を追加した後でも) 'view'のデバッグでは' post_deposit'の値が変化していることが示されます。 TrueまたはFalseの場合、列はテーブルに表示されなくなりました... – someone2088

関連する問題