我首先从一个视图中获取特定品牌的汽车并将其传递到另一个视图,以便用户可以选择汽车的型号。
我的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' %}
的内容,则不起作用。有什么我遗漏的吗?
非常感谢任何帮助。
谢谢!!
答案 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 模板中不起作用的原因。最简单的解决方案是
chosen_brand
中,通过使用 VehicleBrand
或 brand
查询获取 VehicleBrand.objects.get()
对象来传递 VehicleBrand.objects.filter().first()
对象。brands
键中传递名称列表。