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 模板中不起作用

扩展在 Django 1.9 中不起作用

JavaScript 片段在 Django 模板中不起作用

导航链接在导航栏中不起作用(Bootstrap)(Django)

谷歌地图在 App Engine 开发服务器上的 Django 模板中不起作用