2016-09-06 11 views
0

私はDjangoテーブルに条件を含めることを試みていますが、正しい構文を見つけるためにいくつかの問題があります。Djangoの条件テーブル

私のモデルのいずれかにブール値フィールドがあり、その値に基づいて、その特定のdbレコードに対して別のlabel_linkとコールバックURLをレンダリングしたいと思います。ここで

は、私が使用していますコードです:

class Feature(BaseTable): 
    orderable = False 
    title_english = tables.Column() 
    featured_item = tables.Column() 
    if (featured_item == False): 
     actions = tables.TemplateColumn(""" 
     {% url 'add_feature' pk=record.pk as url_ %} 
     {% label_link url_ 'Add to Features' %} 
     """, attrs=dict(cell={'class': 'span1'})) 
    else: 
     actions = tables.TemplateColumn(""" 
     {% url 'remove_feature' pk=record.pk as url_ %} 
     {% label_link url_ 'Remove From Features' %} 
     """, attrs=dict(cell={'class': 'span1'})) 

今私は、これは単に値が存在するかどうかをチェックしていることを、現在認識しています - ので、常にelse文の下のコードをレンダリングします。

私はDjangoテーブルのこのニュアンスをカバーするドキュメントを見つけることができませんでした。

注:私は、Djangoの1.5とPython 2.7を使用していますと、

+0

実際の問題は何ですか?また、 ''feature_item:'ならば、 ''feature_item:'もうまくいくようになります。) – elethan

+0

アイテムが 'featured'アイテムの場合、' remove_feature'のコールバックURLを使ってlabel_linkに "Remove From Features"を読み込ませます。また、そのアイテムが 'featured'アイテムでない場合は – hammerabi

+0

私はこれまでにこの種のテーブルを使用していませんでしたが、これはテーブルオブジェクトではなくテンプレートでやりたいことのようです。 – elethan

答えて

2

あなたはFeatureクラスのif文を置くことができない - それが処理されるクラスがロードされたとき、あなたはへのアクセスを持っていないので、テーブルデータはまだありません。

TemplateColumnの内部では、recordを使用してテーブルの現在の行にアクセスできるため、そこでロジックを移動できます。

class Feature(BaseTable): 
    ... 
    actions = tables.TemplateColumn(""" 
    {% if not record.featured_item %} 
    {% url 'add_feature' pk=record.pk as url_ %} 
    {% label_link url_ 'Add to Features' %} 
    {% else %} 
    {% url 'remove_feature' pk=record.pk as url_ %} 
    {% label_link url_ 'Remove From Features' %} 
    {% endif %} 
    """, attrs=dict(cell={'class': 'span1'})) 
+0

はい、これは私が必要としていたものです。これは魅力的に機能しました。 – hammerabi