Cannot replicate error between local and remote machine

I have code on my laptop that works fine, but when I migrate it to my nginx/gunicorn system, I get error “cannot unpack non-iterable NoneType object”. On the form, there are several input choices originating from models. Those work fine. There are two inputchoices that rely on dict and they seem to be the culprit. If I remove them from the template, there are no errors.

def search_plant(request):
    has_filter = False
    if not request.GET:
        data = models.PlantProfile.objects.none()
    else:
        data = models.PlantProfile.objects.all().order_by("latin_name")
        has_filter = True
    search_filter = filters.PlantProfileFilter(request.GET, queryset=data)
    object_list = search_filter.qs.annotate( #this subquery is from Ken
        is_owner=Coalesce( 
            Subquery(
                models.PlantCollection.objects.filter(owner=request.user, plants=OuterRef("pk"))
                .annotate(owns=Value("Yes"))
                .values("owns")
            ),
            Value("No"),
        )
    )
    return render(
        request,
        "project/search-plant.html",
        {
            "filter": search_filter, #No error if I comment this.
            "object_list": object_list,
            "has_filter": has_filter,
            "url_name": "search-plant",
            "title": "Plant Profile Filter",
        },
    )

Problematic filters:

    bloom_start = django_filters.ChoiceFilter(
        choices=utils.MONTHS,
        method="filter_gte",
    )
    bloom_end = django_filters.ChoiceFilter(
        choices=utils.MONTHS,
        method="filter_lte",
    )
    harvesting_start = django_filters.ChoiceFilter(
        choices=utils.MONTHS,
        method="filter_gte",
    )
    harvesting_end = django_filters.ChoiceFilter(
        choices=utils.MONTHS,
        method="filter_lte",
    )

utils.MONTHS is just a dict

MONTHS = {
    None: "",
    1: "January",
    2: "February",
    3: "March",
    4: "April",
    5: "May",
    6: "June",
    7: "July",
    8: "August",
    9: "September",
    10: "October",
    11: "November",
    12: "December",
}

It’s a nightmare to troubleshoot this on remote server and I simply wish I could get the error on my local machine.

The error is caused by something with the {{filter.form.light_to}} which appear to be non-iterable

            <div class="flex-col">
                <div class="title">Sun Requirement</div>
                <div class="light-range__inputs">
                    <div class="form__field"><label class="form-label">Max</label>{{filter.form.light_from}}</div>
                    <div class="form__field"><label class="form-label">Min</label>{{filter.form.light_to}}</div>
                </div>
            </div>

Can you provide the full stack trace, not just that bit of the error?

Sure, here it is.
Now I wonder if it could be a Django version issue. My local machine is on Django 5.1.3

Environment:

Request Method: GET

Django Version: 4.2.16
Python Version: 3.9.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.forms',
 'django_browser_reload',
 'project']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django_browser_reload.middleware.BrowserReloadMiddleware']


Template error:
In template /home/mariost-gelais/owsl.mariostg.com/project/templates/project/search-form.html, error at line 33
   cannot unpack non-iterable NoneType object
   23 :             <div class="flex-col">
   24 :                 <div class="title">Humidity Range</div>
   25 :                 <div class="humidity-range__inputs">
   26 :                     <div class="form__field"><label class="form-label">Min</label>{{filter.form.soil_humidity_min}}</div>
   27 :                     <div class="form__field"><label class="form-label">Max</label>{{filter.form.soil_humidity_max}}</div>
   28 :                 </div>
   29 :             </div>
   30 :             <div class="flex-col">
   31 :                 <div class="title">Bloom Period</div>
   32 :                 <div class="humidity-range__inputs">
   33 :                     <div class="form__field"><label class="form-label">Start</label> {{filter.form.bloom_start}} </div>
   34 :                     <div class="form__field"><label class="form-label">End</label>{{filter.form.bloom_end}}</div>
   35 :                 </div>
   36 :             </div>
   37 :             <div class="flex-col">
   38 :                 <div class="title">Harvesting Period</div>
   39 :                 <div class="humidity-range__inputs">
   40 :                     <div class="form__field"><label class="form-label">Start</label>{{filter.form.harvesting_start}}</div>
   41 :                     <div class="form__field"><label class="form-label">End</label>{{filter.form.harvesting_end}}</div>
   42 :                 </div>
   43 :             </div>


Traceback (most recent call last):
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/mariost-gelais/owsl.mariostg.com/project/views.py", line 130, in search_plant
    return render(
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/shortcuts.py", line 24, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 175, in render
    return self._render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/test/utils.py", line 112, in instrumented_test_render
    return self.nodelist.render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/loader_tags.py", line 157, in render
    return compiled_parent._render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/test/utils.py", line 112, in instrumented_test_render
    return self.nodelist.render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/loader_tags.py", line 63, in render
    result = block.nodelist.render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/loader_tags.py", line 208, in render
    return template.render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 177, in render
    return self._render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/test/utils.py", line 112, in instrumented_test_render
    return self.nodelist.render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 1070, in render
    return render_value_in_context(output, context)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/template/base.py", line 1047, in render_value_in_context
    value = str(value)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/utils/html.py", line 469, in <lambda>
    klass.__str__ = lambda self: mark_safe(klass_str(self))
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/forms/boundfield.py", line 34, in __str__
    return self.as_widget()
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/forms/boundfield.py", line 107, in as_widget
    return widget.render(
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/forms/widgets.py", line 280, in render
    context = self.get_context(name, value, attrs)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/forms/widgets.py", line 758, in get_context
    context = super().get_context(name, value, attrs)
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/forms/widgets.py", line 717, in get_context
    context["widget"]["optgroups"] = self.optgroups(
  File "/home/mariost-gelais/owsl.mariostg.com/.venv-owsl/lib/python3.9/site-packages/django/forms/widgets.py", line 657, in optgroups
    for index, (option_value, option_label) in enumerate(self.choices):

Exception Type: TypeError at /search-plant/
Exception Value: cannot unpack non-iterable NoneType object

Side note: Just like with the code, you need to enclose the tracebacks between lines of ``` to ensure all the data is being shown.

Oups. I saw you did it. Thanks.

Given that you’re running different versions of Django and Python between the two environments, have you ensured that all your ancillary libraries (such as django_filters) are compatible in your remote environment?

(You mention you’re using Django 5.1.3 locally, which implies at least Python 3.10. But your remote system is Django 4.2 & Python 3.9, which could cause some version incompatibilities with other third-party libraries.)

Also, I noticed you’ve got django.forms in your INSTALLED_APPS. I’m not aware of any situation where it is used as a Django app - you might want to remove it.

Well, I recreated my venv on the remote computer using python 3.12, which I had to compile first, upgraded django to 5.1 and everything is working fine. Wonderful Python/django.

Will check what this django.forms is doing in the INSTALLED_APPS

I don’t know how many third-party packages you are using in your project, or how you’re building your environment in that remote system, but it might have been less work to first check the versions of the libraries you are using.

Going back to the django.forms in my INSTALLED_APPS, if I remove the statement, I get a TEmplateDoesNotExist error. But that might be off topic.

Also, I am using django_filters but I don’t need to have it in my INSTALLED_APPS which I find strange since it should be there according to Installation - django-filter 24.3 documentation

Environment:


Request Method: GET
Request URL: http://127.0.0.1:5555/search-plant/

Django Version: 5.1.3
Python Version: 3.11.1
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django_browser_reload',
 'project']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django_browser_reload.middleware.BrowserReloadMiddleware']

Template loader postmortem
Django tried loading these templates, in this order:

Using engine django:
    * django.template.loaders.filesystem.Loader: /Users/mariost-gelais/Documents/gitprojects/owsl/djbp/templates/django/forms/widgets/text.html (Source does not exist)
    * django.template.loaders.app_directories.Loader: /Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/contrib/admin/templates/django/forms/widgets/text.html (Source does not exist)
    * django.template.loaders.app_directories.Loader: /Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/contrib/auth/templates/django/forms/widgets/text.html (Source does not exist)
    * django.template.loaders.app_directories.Loader: /Users/mariost-gelais/Documents/gitprojects/owsl/djbp/project/templates/django/forms/widgets/text.html (Source does not exist)


Template error:
In template /Users/mariost-gelais/Documents/gitprojects/owsl/djbp/project/templates/project/search-form.html, error at line 9
   django/forms/widgets/text.html
   1 : 
   2 : <div class="form-container">
   3 :     <form class='form' method="GET">
   4 :         <header class="form__header">Input one or many search criterion</header>
   5 :         <div class="panel">
   6 :         <div class="flex-col">
   7 :             <div class="title">Plant Names</div>
   8 :             <div class="flex-row">
   9 :                 <div class="form__field"><label class="form-label">Latin</label>  {{filter.form.latin_name}} </div>
   10 :                 <div class="form__field"><label class="form-label">English</label> {{filter.form.english_name}}</div>
   11 :                 <div class="form__field"><label class="form-label">French</label> {{filter.form.french_name}}</div>
   12 :             </div>
   13 :         </div>
   14 : 
   15 :         <div class="flex-row">
   16 :             <div class="flex-col">
   17 :                 <div class="title">Sun Requirement</div>
   18 :                 <div class="light-range__inputs">
   19 :                     <div class="form__field"><label class="form-label">Max</label>{{filter.form.light_from}}</div>


Traceback (most recent call last):
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/backends/django.py", line 107, in render
    return self.template.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 171, in render
    return self._render(context)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/test/utils.py", line 114, in instrumented_test_render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 1008, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 1008, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 969, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/loader_tags.py", line 159, in render
    return compiled_parent._render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/test/utils.py", line 114, in instrumented_test_render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 1008, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 1008, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 969, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/loader_tags.py", line 65, in render
    result = block.nodelist.render(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 1008, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 1008, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 969, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/loader_tags.py", line 210, in render
    return template.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 173, in render
    return self._render(context)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/test/utils.py", line 114, in instrumented_test_render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 1008, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 1008, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 969, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 1073, in render
    return render_value_in_context(output, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/base.py", line 1050, in render_value_in_context
    value = str(value)
            ^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/forms/utils.py", line 79, in __str__
    return self.as_widget()
           ^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/forms/boundfield.py", line 108, in as_widget
    return widget.render(
           
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/forms/widgets.py", line 279, in render
    return self._render(self.template_name, context, renderer)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/forms/widgets.py", line 284, in _render
    return mark_safe(renderer.render(template_name, context))
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/forms/renderers.py", line 28, in render
    template = self.get_template(template_name)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/forms/renderers.py", line 110, in get_template
    return get_template(template_name)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/loader.py", line 19, in get_template
    raise TemplateDoesNotExist(template_name, chain=chain)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The above exception (django/forms/widgets/text.html) was the direct cause of the following exception:
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/project/views.py", line 132, in search_plant
    return render(
           
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/shortcuts.py", line 25, in render
    content = loader.render_to_string(template_name, context, request, using=using)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/backends/django.py", line 109, in render
    reraise(exc, self.backend)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mariost-gelais/Documents/gitprojects/owsl/djbp/.venv-owsl/lib/python3.11/site-packages/django/template/backends/django.py", line 130, in reraise
    raise new from exc
    ^^^^^^^^^^^^^^^^^^

Exception Type: TemplateDoesNotExist at /search-plant/
Exception Value: django/forms/widgets/text.html

What happens if you have django_filters in INSTALLED_APPS but not django.forms?

Still get template does not exists with following:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "django_filters",
    # "django.forms",
    # "debug_toolbar",
    "django_browser_reload",
    "project",
]

What is your TEMPLATES setting from your settings file?

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [BASE_DIR / "templates"],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]