使用simple-django-filter添加额外模板报错,此前提问未获回复
Hey there, let's work through this template problem you're having with your Django filter setup. Based on what you've described, here are the most common fixes to get your results template working properly:
1. Double-Check Your Template File Paths
Django looks for templates in specific directories, so make sure your new results template (e.g., results.html) is in the right place:
- Put it inside your app's
templates/[your-app-name]/folder (likemyapp/templates/myapp/results.html). This follows Django's default template lookup rules. - Verify your
settings.pyhasAPP_DIRS = Truein theTEMPLATESconfiguration—this tells Django to automatically check each app's template folder.
2. Configure Your View to Use the Correct Template
If you're using a class-based FilterView (the standard approach with this package), explicitly set the template_name attribute to point to your results template:
from django_filters.views import FilterView from .filters import YourFilterSet class SearchResultsView(FilterView): filterset_class = YourFilterSet template_name = 'myapp/results.html' # Match your template's path here
For function-based views, ensure your render() call references the correct template name:
from django.shortcuts import render from .filters import YourFilterSet def search_results(request): filterset = YourFilterSet(request.POST, queryset=YourModel.objects.all()) return render(request, 'myapp/results.html', {'filter': filterset})
3. Link Your Form to the Results View
Make sure your search form's action attribute points to the URL of your results view. In your search page template:
<form method="POST" action="{% url 'search_results' %}"> {% csrf_token %} {{ filter.form.as_p }} <button type="submit">Run Search</button> </form>
And don't forget to map that URL name in your urls.py:
from django.urls import path from .views import SearchResultsView urlpatterns = [ # ... other URLs path('search/results/', SearchResultsView.as_view(), name='search_results'), ]
4. Ensure Variables Are Available in the Results Template
The FilterView automatically passes filtered results as object_list and the filterset as filter to your template. Double-check you're using the right variables in results.html:
<h2>Search Results</h2> {% if filter.qs %} <ul> {% for item in filter.qs %} <li>{{ item.title }}</li> <!-- Replace with your model's actual fields --> {% endfor %} </ul> {% else %} <p>No matching results found.</p> {% endif %}
5. Use the Error Message to Narrow It Down
If you're still getting an error, the exact message will tell you what's wrong:
- TemplateDoesNotExist: Django can't find your template—double-check the file path and name (case matters on some systems!).
- VariableDoesNotExist: The view isn't passing the expected data to the template—verify your view's context setup.
内容的提问来源于stack exchange,提问作者user1470034

