2017-04-22 55 views
0

的網址:myurl/?page=1&reverse使用的QueryDict項目的if語句

現在我想在模板是否reverse檢查是在那裏:

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

if之間什麼在和endif從未發生過!

我應該用什麼來代替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。)向上下文添加一個變量'reversed'? – Asqiir

+0

在這種情況下,'reversed'的值將是錯誤的,因爲它是一個空字符串,即使密鑰存在。最好是使用這樣的東西:'reverse ='reverse'request.GET' –

+0

@Asqiir這個問題的答案解釋瞭如何使用基於類的視圖來做到這一點。 http://stackoverflow.com/questions/15754122/url-parameters-and-logic-in-django-class-based-views-templateview –