2017-04-22 1 views
0

Die url: myurl/?page=1&reversemit QueryDict Artikel für if-Anweisung

Jetzt möchte ich in der Vorlage prüfen, ob reverse da drin ist:

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

Aber was ist zwischen der if und endif nie passiert!

Was sollte ich anstelle von request.GET.reverse verwenden?

Antwort

1

Warum nicht diese Logik in Ihre view? Wie folgt aus:

# 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 

Dann tun:

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

Auf der anderen Seite, wenn Sie immer noch diese Art von Logik in der Vorlage tun wollen, dann sollten Sie Ihre own filter wie folgt erstellen:

from django import template 

register = template.Library()  

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

und verwenden sie es wie folgt aus:

{% load my_filters %} 

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

Wie funktioniert das mit generischen Ansichten? (Ich verwende eine ListView.) Hinzufügen einer Variablen "umgekehrt" zum Kontext? – Asqiir

+0

Der Wert von "reversed" in diesem Fall wäre falsch, da es eine leere Zeichenfolge ist, auch wenn der Schlüssel existiert. Es wäre besser, etwas wie folgt zu verwenden: 'reversed = 'reverse' in request.GET' –

+0

@Asqiir Antworten auf diese Frage erläutert, wie dies mit einer klassenbasierten Ansicht zu tun ist. http://stackoverflow.com/questions/15754122/url-parameters-and-logic-in-django-class-based-views-templateview –