if文

2017-04-22 10 views
0

URLのためのQueryDictアイテムを使用して:if文

{% if request.GET.reverse %} 
    do somthing 
{% endif %} 

しかし、何が起こることはありませんifendifの間でです:myurl/?page=1&reverse

は、今私はreverseがそこにあるかどうかをテンプレートにチェックしたいです!

request.GET.reverseの代わりに何を使用しますか?

答えて

1

なぜ論理をviewに入れないのですか?このように:

# Function Based View (FBV) 

def my_view(request): 
    reversed = request.GET.get('reverse', '') 
    return render(request, 'template.html', locals()) 

# Class Based View (CBV) 
class MyView(ListView): 
    template_name = 'path/to/template.html' 
    queryset = MyModel.objects.filter(...) 
    context_object_name = 'my_obj' 

    def get_context_data(self, **kwargs): 
     context = super(MyView, self).get_context_data(**kwargs) 
     context['reversed'] = self.request.GET.get('reverse', '') 
     return context 

を次に実行します。一方

{% if reversed %} 
    do somthing 
{% endif %} 

、あなたはまだあなたのテンプレートでこの種のロジックをしたい場合、あなたはこのようなあなたのown filter作成する必要があります。

from django import template 

register = template.Library()  

def is_in_dict(d, key): 
    return key in d 

とこのようにそれを使用します。

{% load my_filters %} 

{% if request.GET|is_in_dict:"reverse" %} 
    do somthing 
{% endif %} 
+1

これは一般的なビューでどのように機能しますか? (私はListViewを使用しています。)コンテキストに逆の変数を追加しますか? – Asqiir

+0

この場合、 'reversed'の値は、キーが存在していても空の文字列であるため、falseです。 'reverseed = 'reverse' in request.GET' –

+0

@Asqiirこの質問の回答は、クラスベースのビューでこれを行う方法を説明しています。 http://stackoverflow.com/questions/15754122/url-parameters-and-logic-in-django-class-based-views-templateview –