For 循环变量在 Django 模板中的 if 条件下不起作用

时间:2021-06-04 12:48:49

标签: django django-templates

我首先从一个视图中获取特定品牌的汽车并将其传递到另一个视图,以便用户可以选择汽车的型号。

我的views.py...

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)

我的 driver_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>

但后来我意识到 brand 变量在 if 条件中无法识别。

但是,如果我添加类似 {% if chosen_brand == 'BMW' %} 的内容,它可以正常工作,但如果我添加类似 {% if brand == 'BMW' %} 的内容,则不起作用。有什么我遗漏的吗?

非常感谢任何帮助。

谢谢!!

2 个答案:

答案 0 :(得分:2)

因为 brand 是一个对象,而您正在与字符串进行比较。因此,请确保按应该是字符串的属性进行比较。

        {% for brand in brands %}
            {% if brand.name == chosen_brand %}
                {{brand}}
            {% else %}
                {{brand}}
            {% endif %}
        {% endfor %}

*注意:- 我使用的品牌名称只是作为示例,您可能还有其他属性名称,例如:model_name 或 sthg 类似。

另外,您可能会问,{{brand}} 只是提供车辆名称,我们为什么不能进行比较。答案是,__str__ 方法仅用于给出对象的字符串表示。

参考:__str__

答案 1 :(得分:0)

这里有一些错误。

def driver_dashboard_trip_brand (request, brand):
    brands = VehicleBrand.objects.all()
    context = {
        "brands":brands,
        "chosen_brand":brand
    }

在这里,在品牌列表中,您将获得一个 VehicleBrand 对象的查询集(类似于列表)。但是,在 chosen_brand 中,您传递的是从请求路径参数中获得的 string。这就是您的 if 条件在 Django 模板中不起作用的原因。最简单的解决方案是

  1. chosen_brand 中,通过使用 VehicleBrandbrand 查询获取 VehicleBrand.objects.get() 对象来传递 VehicleBrand.objects.filter().first() 对象。
  2. 在上下文的 brands 键中传递名称列表。
相关问题