【问题标题】:using querydict item for if-statement对 if 语句使用 querydict 项
【发布时间】:2017-09-19 12:28:36
【问题描述】:

网址:myurl/?page=1&reverse

现在我想检查模板中是否有reverse

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

但是ifendif 之间的事情永远不会发生!

我应该用什么来代替request.GET.reverse

【问题讨论】:

    标签: django django-templates


    【解决方案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 %}
    

    【讨论】:

    • 通用视图如何工作? (我正在使用 ListView。)将变量 reversed 添加到上下文中?
    • 在这种情况下reversed 的值将是错误的,因为它是一个空字符串,即使键存在。最好使用这样的东西:reversed = 'reverse' in request.GET
    • @Asqiir 这个问题的答案解释了如何使用基于类的视图来做到这一点。 stackoverflow.com/questions/15754122/…
    • @Asqiir。是的,Haken Lid 是对的。查看此链接以了解如何使用 CBV。
    猜你喜欢
    • 2016-07-26
    • 2019-03-18
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多