2017-04-22 86 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 –