html select标签在django模板中不起作用
Posted
技术标签:
【中文标题】html select标签在django模板中不起作用【英文标题】:html select tag not working in django template 【发布时间】:2021-03-07 23:43:08 【问题描述】:这个问题被问了很多次,但我认为我在 Django 模板中遇到了字符串问题
我有一个选择标签,我想从数据库中选择默认选项
<select name="category" class="form-control" required="" id="id_category">
<option value="" >--------</option>
% for cat in all_categories %
<option value="cat" % if form.instance.category == cat % selected % endif %> cat</option>
% endfor %
</select>
我的 cat 变量的值为“Django Book”,而 form.instance.category 也具有相同的值,即“Django Book”。
但它没有选择所需的选项
但是,我在另一部分使用了类似的逻辑
<select class="form-control" id="client" required name="client">
<option value=" ">-----</option>
% for customer in all_customers %
<option value="customer.pk" % if form.instance.client_id.pk == customer.pk %selected% endif %>customer</option>
% endfor %
</select>
但这次我比较 ids 以选择默认选项并且它有效。
上面的代码有什么问题??这是字符串的问题吗?以及如何克服这一点。
另外,我想在第一个代码示例中的 value 属性中设置字符串。
感谢您的帮助。
【问题讨论】:
字符串比较在模板中也很简单,所以我认为这不是问题。这类问题的大多数来自变量中的拼写错误或错误数据。因此,我建议在选择标记之前放置一些调试数据,例如form.instance.category is [form.instance.category]
,然后在浏览器的“检查”元素中检查选择标记的选项值。
@datosula,我试过form.instance.category is [form.instance.category]
,它给出的字符串与select标签中value
中的字符串完全相同,我还仔细检查了拼写错误,数据存储在CharField 在我的模型中,但仍然没有选择正确的选项
【参考方案1】:
你可以试试这个方法:
在应用程序内创建一个templatetags
文件夹。并在该文件夹中创建两个文件,即__init__.py
& filters.py
。
让__init__
文件为空,在filters
文件中写入过滤代码。
from django.template import Library
register = Library()
@register(name='string_filter')
def string_filter(value1, *args, **kwargs):
if args:
value2 = args[0].lower()
if value2 == value1.lower():
return True
else:
return False
else:
return False
现在将过滤器加载到文件顶部但在% load static %
下方的模板中
% load 'filters' %
现在使用过滤器进入选择标签。
<select name="category" class="form-control" required="" id="id_category">
<option value="" >--------</option>
% for cat in all_categories %
% if form.instance.category|string_filter: cat %
<option value="cat" selected> cat</option>
% else %
<option value="cat"> cat</option>
% endif %
% endfor %
</select>
【讨论】:
我在比较字符串的类别选择框中遇到问题,而不是在这个选择框中,这个选择框已经可以正常工作了 我试过了,但它给了我Could not parse the remainder: ':' from 'form.instance.category|string_filter:'
in % if form.instance.category|string_filter: cat %
这一行以上是关于html select标签在django模板中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Django 表单在 html 模板中不起作用,它只是显示按钮
Jquery .load() 在 Django 模板中不起作用