如何解决在 Django 模板中将字符串值转换为整数
在 home.html
<div class="container">
<div class="row">
<div class="col-md-6">
<h3>Select products:</h3>
<form id="selectProduct" role="search" method="get" action="{% url 'home' %}">
<select name="parameters" data-placeholder="Choose products" class="chosen-select" multiple tabindex="4">
{% for p in productnames %}
{% if k == p %}
<option value="{{ p.productnames }}" selected> {{ p.productnames }} </option>
{% else%}
<option value="{{ p.id }}"> {{ p.productnames }} </option>
{% endif %}
{% endfor %}
</select><br/>
<label for="submit"></label><button id="submit" type="submit" class="btn btn-default">Submit</button>
</form>
</div>
</div>
<div class="row"></div><br />
<h3> Distribution of sales in the products:</h3>
</div>
</div>
{% for p in productList %}
{% for pin in productnames %}
<p>{{pin.id}} {{p}}</p>
{% if p == pin.id %}
<p>exists</p>
{% else %}
<p>not exist</p>
{% endif %}
{% endfor %}
{% endfor %}
<p>{{ productList }}</p>
在这个 html 文件中,'p' 总是为 ex 返回一个字符串值:它返回像 '10' 而不是 10。我想要的只是将这个 '10' 转换为 10 或将返回的其他 p_in 值转换为10 到“10”。
在views.py中
def productList(request):
if request.method == 'GET':
p = request.GET.get('parameters')
print(p)
#k = request.GET('parameters[]')
productnames = Products.objects.all()
context = {
'productList': p,'productnames': productnames,}
return render(request,'home.html',context)
我尝试将产品列表中的 p 值转换为整数。因为它与 pin.id 的格式不匹配
解决方法
您使用 if-else
过滤模板中的查询集,这并不理想。相反,您应该在视图本身中执行此过滤。此外,您的 parameters
是一个选择标签,它可能有多个选定的值,但您使用 .get('parameters')
只会给您一个值,而您应该使用 QueryDict 的 getlist
method [Django docs]:
def productList(request):
if request.method == 'GET': # Do you even need to check this? You appear to only use a GET request...
p = request.GET.getlist('parameters')
productnames = Products.objects.all()
filtered_products = Products.objects.filter(pk__in=p)
context = {
'productList': p,'productnames': productnames,'filtered_products': filtered_products
}
return render(request,'home.html',context)
在模板中,您的循环将简单地变为:
{% for product in filtered_products %}
{{ product.productnames }}
{% endfor %}
注意:您应该使用表单类而不是手动制作表单。见Building a form in
Django。
模型名称也应该是单数,因此而不是
您应该将其命名为 Products
Product
。一般在
你的代码你也打破了 Python 中的各种命名约定,我会
建议你看看PEP 8 -- Style Guide for Python
Code
在views.py中
def productList(request):
if request.method == 'GET':
p = request.GET.getlist('parameters')
print(p)
#k = request.GET('parameters[]')
productnames = Products.objects.all()
context = {
'productList': p,}
# --- logic later for chart ------
return render(request,context)
在 home.html
<div class="container">
<div class="row">
<div class="col-md-6">
<h3>Select products:</h3>
<form id="selectProduct" role="search" method="get" action="{% url 'home' %}">
<select name="parameters" data-placeholder="Choose products" class="chosen-select" multiple tabindex="4">
{% for p in productnames %}
{% if k == p %}
<option value="{{ p.productnames }}" selected> {{ p.productnames }} </option>
{% else%}
<option value="{{ p.id }}"> {{ p.productnames }} </option>
{% endif %}
{% endfor %}
</select><br/>
<label for="submit"></label><button id="submit" type="submit" class="btn btn-default">Submit</button>
</form>
</div>
</div>
<div class="row"></div><br />
<h3> Distribution of sales in the products:</h3>
</div>
</div>
{% for p in productList %}
{% for pin in productnames %}
<p>{{pin.id|stringformat:"s"}} {{p}}</p>
{% if p == pin.id|stringformat:"s" %}
<p>exists</p>
{% else %}
<p>not exist</p>
{% endif %}
{% endfor %}
{% endfor %}
<p>{{ productList }}</p>
注意 {{value|stringformat:"s"}}
可用于将 integer value
转换为 string value
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。