【问题标题】:html select tag not working in django templatehtml select标签在django模板中不起作用
【发布时间】: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 在我的模型中,但仍然没有选择正确的选项

标签: html django django-templates


【解决方案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 %} 这一行
猜你喜欢
  • 2011-04-28
  • 2016-03-22
  • 1970-01-01
  • 2013-04-02
  • 2012-08-23
  • 2019-06-24
  • 2016-01-29
  • 1970-01-01
  • 2014-12-10
相关资源
最近更新 更多