簡體   English   中英

django-filter 僅在 venv 中尋找模板

[英]django-filter looking for templates only in venv

試圖為 RangeFilter 制作自定義小部件。 每次 django 升高

TemplateDoesNotExist

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

Using engine django:


django.template.loaders.filesystem.Loader: C:\Users\Alexander\PycharmProjects\Search\venv\lib\site-packages\django\forms\templates\MyRangeWidget.html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\Users\Alexander\PycharmProjects\Search\venv\lib\site-packages\django_filters\templates\MyRangeWidget.html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\Users\Alexander\PycharmProjects\Search\venv\lib\site-packages\django\contrib\admin\templates\MyRangeWidget.html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\Users\Alexander\PycharmProjects\Search\venv\lib\site-packages\django\contrib\auth\templates\MyRangeWidget.html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\Users\Alexander\PycharmProjects\Search\venv\lib\site-packages\debug_toolbar\templates\MyRangeWidget.html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\Users\Alexander\PycharmProjects\Search\venv\lib\site-packages\bootstrap5\templates\MyRangeWidget.html (Source does not exist)

django 搜索模板的每條路徑都在 venv 中。 當我讓我的小部件匹配這條路徑時,它工作得很好。

venv\lib\site-packages\django_filters\templates\MyRangeWidget.html

但我認為這樣做不是正確的方法。

我的小部件:

<div class="input-group">
{% for widget in widget.subwidgets %}
{% if forloop.first %}
<span class="input-group-text"><i class="bi bi-chevron-left"></i></span>
{% endif %}
{% if forloop.last %}
<span class="input-group-text"><i class="bi bi-chevron-right"></i></span>
{% endif %}


{% include widget.template_name %}
{% endfor %}

過濾器.py

import django_filters
from .models import *
from .widgets import MyRangeWidget


class LandFilter(django_filters.FilterSet):
    price = django_filters.RangeFilter(widget=MyRangeWidget)
    size = django_filters.RangeFilter(widget=MyRangeWidget)
    

    class Meta:
        model = PriceChangeHistory
        fields = ['price', 'size']

小部件.py

import django_filters.widgets


class MyRangeWidget(django_filters.widgets.RangeWidget):
    template_name = 'MyRangeWidget.html'

設置.py

BASE_DIR = Path(__file__).resolve().parent.parent

INSTALLED_APPS = [
    'django_filters',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'debug_toolbar',
    'bootstrap5',
    'search',

]

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',
            ],
        },
    },
]

順便提一下,我在 template_name 中嘗試了不同的路徑。 在我注意到 django 甚至沒有嘗試在除 venv 之外的任何地方搜索它之前,甚至包括絕對路徑。

不知道是我還是它的 django-filter package 問題。

第二天尋找如何解決它的方法,在我在這里問它之后,我找到了方法。

在已安裝的應用程序和 FORM_RENDERER 變量中添加了 django.forms ,如下所示:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    'django.forms',
    
    'django_filters',
    'debug_toolbar',
    'bootstrap5',
    'search',

]

FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'

現在小部件中的 template_name 可以按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM