【发布时间】:2017-09-19 12:28:36
【问题描述】:
网址:myurl/?page=1&reverse
现在我想检查模板中是否有reverse:
{% if request.GET.reverse %}
do somthing
{% endif %}
但是if 和endif 之间的事情永远不会发生!
我应该用什么来代替request.GET.reverse?
【问题讨论】:
网址:myurl/?page=1&reverse
现在我想检查模板中是否有reverse:
{% if request.GET.reverse %}
do somthing
{% endif %}
但是if 和endif 之间的事情永远不会发生!
我应该用什么来代替request.GET.reverse?
【问题讨论】:
为什么不把这个逻辑放在你的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 %}
【讨论】:
reversed 添加到上下文中?
reversed 的值将是错误的,因为它是一个空字符串,即使键存在。最好使用这样的东西:reversed = 'reverse' in request.GET