我正在尝试用自己的替换小部件模板,但我收到TemplateDoesNotExist
错误。
在app \ forms.py中:
class SelectPlus(Select):
template_name = 'selectplus.html'
class SimpleForm(ModelForm):
somefield = ModelChoiceField(
queryset=SomeObjects.objects.all(),
widget=SelectPlus(attrs={'url': 'custom_url_to_context'})
)
在settings.py中
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [ROOT_PATH, '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',
],
},
},
在调试跟踪中,我看到模板加载器不在应用程序文件夹或主模板文件夹中搜索:
但所有其他模板都运行正常。
答案 0 :(得分:1)
在Django 1.11中:
NSError
导入要修改的窗口小部件。您可以在此处找到您的选择:https://docs.djangoproject.com/en/1.11/ref/forms/widgets/#built-in-widgets
创建子类并指定模板名称。
# app/widgets.py
from django.forms.widgets import DefaultWidget
class SelectPlus(DefaultWidget):
template_name = 'app/selectplus.html'
创建模板。这是完全从django / forms / widgets / select.html复制的,但你可以在这里放任何你想要的东西。您还可以参考其他现有的小部件模板以获得灵感。您可以在此处找到您的选择:https://github.com/django/django/tree/master/django/forms/templates/django/forms/widgets
# app/templates/app/selectplus.html
<select name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}>{% for group_name, group_choices, group_index in widget.optgroups %}{% if group_name %}
<optgroup label="{{ group_name }}">{% endif %}{% for option in group_choices %}
{% include option.template_name with widget=option %}{% endfor %}{% if group_name %}
</optgroup>{% endif %}{% endfor %}
</select>
导入您的客户窗口小部件(SelectPlus)并将其添加到表单中的字段。
最后,在您的模板中,渲染主要字段,它将引用app / templates / app / selectplus.html。
答案 1 :(得分:0)
您有两种方法可以解决此问题。
1)修复模板路径,如下所示。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [ROOT_PATH, os.path.join(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',
],
},
}
2)在应用程序内添加模板文件夹。