For循环变量不';t在Django模板中的if条件下工作

For循环变量不';t在Django模板中的if条件下工作,django,django-templates,Django,Django Templates,我首先从一个视图中选取一个特定品牌的汽车,然后将其传递到另一个视图中,这样用户就可以选择汽车的型号 我的观点。派克 def driver_dashboard_trip_brand (request, brand): brands = VehicleBrand.objects.all() context = { "brands":brands, "chosen_brand":brand } re

我首先从一个视图中选取一个特定品牌的汽车,然后将其传递到另一个视图中,这样用户就可以选择汽车的型号

我的观点。派克

def driver_dashboard_trip_brand (request, brand):
    brands = VehicleBrand.objects.all()
    context = {
        "brands":brands,
        "chosen_brand":brand
    }
    return render (request, "app/driver_dashboard.html", context)
我的驱动程序\u dashboard.html

<div class="mb-3">
    <select class="form-select" aria-label="Default select example" id="brand" name="brand" onchange="submitBrand(event)">
        <option value="">Choose a brand</option>
        {% for brand in brands %}
            {% if brand == chosen_brand %}
                <option value="{{brand}}" selected>{{brand}}</option>
            {% else %}
                <option value="{{brand}}">{{brand}}</option>
            {% endif %}
        {% endfor %}
    </select>
</div>

选择一个品牌
{品牌中品牌的百分比%}
{%if brand==所选品牌%}
{{brand}}
{%else%}
{{brand}}
{%endif%}
{%endfor%}
但后来我意识到,
brand
变量在if条件下无法识别

但是,如果我添加这样的内容
{%if selected\u brand=='BMW%}
,它工作得非常好,但是如果我添加这样的内容
{%if brand=='BMW%}
,它就不起作用了。有什么我错过的吗

非常感谢您的帮助


谢谢

因为
品牌
是一个对象,您正在与字符串进行比较。所以,请确保按属性进行比较,该属性应为字符串

        {% for brand in brands %}
            {% if brand.name == chosen_brand %}
                {{brand}}
            {% else %}
                {{brand}}
            {% endif %}
        {% endfor %}
{%用于品牌中的品牌%}
{%if brand.name==所选品牌%}
{{brand}}
{%else%}
{{brand}}
{%endif%}
{%endfor%}
*注意:-我使用brand.name作为示例,您可能有其他属性名称,如:model_name或类似的sthg

此外,您可能会问,
{{brand}}
只给出车辆名称,为什么我们不能进行比较。答案是,
\uuu str\uu
方法,该方法仅用于给出对象的字符串表示形式


Ref:

因为
品牌
是一个对象,您正在与字符串进行比较。所以,请确保按属性进行比较,该属性应为字符串

        {% for brand in brands %}
            {% if brand.name == chosen_brand %}
                {{brand}}
            {% else %}
                {{brand}}
            {% endif %}
        {% endfor %}
{%用于品牌中的品牌%}
{%if brand.name==所选品牌%}
{{brand}}
{%else%}
{{brand}}
{%endif%}
{%endfor%}
*注意:-我使用brand.name作为示例,您可能有其他属性名称,如:model_name或类似的sthg

此外,您可能会问,
{{brand}}
只给出车辆名称,为什么我们不能进行比较。答案是,
\uuu str\uu
方法,该方法仅用于给出对象的字符串表示形式


参考资料:

这里有几件事不对

def driver_dashboard_trip_brand (request, brand):
    brands = VehicleBrand.objects.all()
    context = {
        "brands":brands,
        "chosen_brand":brand
    }
在这里,在品牌列表中,您可以获得
VehicleBrand
对象的查询集(类似于列表)。但是,在
选择的\u brand
中,您正在传递一个
字符串,该字符串是从请求路径参数中获得的。这就是为什么if条件在Django模板中不起作用的原因。最简单的解决办法是

  • selected\u brand
    中,通过使用
    brand
    获取
    VehicleBrand.objects.get()
    VehicleBrand.objects.filter().first()查询来传递
    VehicleBrand
    对象
  • 在上下文的
    品牌
    键中传递名称列表

  • 这里有几件事不对

    def driver_dashboard_trip_brand (request, brand):
        brands = VehicleBrand.objects.all()
        context = {
            "brands":brands,
            "chosen_brand":brand
        }
    
    在这里,在品牌列表中,您可以获得
    VehicleBrand
    对象的查询集(类似于列表)。但是,在
    选择的\u brand
    中,您正在传递一个
    字符串,该字符串是从请求路径参数中获得的。这就是为什么if条件在Django模板中不起作用的原因。最简单的解决办法是

  • selected\u brand
    中,通过使用
    brand
    获取
    VehicleBrand.objects.get()
    VehicleBrand.objects.filter().first()查询来传递
    VehicleBrand
    对象
  • 在上下文的
    品牌
    键中传递名称列表

  • 是的,非常好,非常感谢!!是的,非常好,非常感谢!!嘿,你的方法没有错,但是如果你有另一个查询,你会降低网站的性能,但是非常感谢你的帮助!嘿,你的方法没有错,但是如果你有另一个查询,你会降低网站的性能,但是非常感谢你的帮助!