You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django TemplateDoesNotExist报错:模板路径匹配问题排查

问题分析与解决

你遇到的情况是:模板文件实际存放在绝对路径/home/user/Desktop/ais/django-cruds-adminlte/demo/demo/templates/testapp/athlete/acrud/create.html,但访问/testapp/athlete/create时触发TemplateDoesNotExist错误,错误里列出了testapp/athlete/acruds/create.html, acruds/create.html这两个路径。下面分两部分解答你的疑问:

一、为什么错误信息里的路径用逗号分隔?

Django在查找模板时,会按照预设的模板查找顺序依次检查多个候选路径,当所有尝试的路径都找不到对应模板文件时,就会把这些它试过的路径用逗号分隔列出来,明确告诉你它搜索过哪些位置但都没命中。

具体到你的场景:

  • testapp/athlete/acruds/create.html:这是结合你的app名称(testapp)、模型名称(athlete)和视图里设置的template_name_base = 'acruds'拼接出的具体路径
  • acruds/create.html:这是仅使用template_name_base和视图类型(create)拼接的通用路径

Django会优先查找更具体的app+模型+模板基路径组合,找不到再尝试通用模板路径,最终没找到就把这两个候选路径都列在错误信息里。

二、如何解决TemplateDoesNotExist报错?

从你的代码和实际文件路径来看,核心问题是模板路径的拼写不一致:

  • 你实际的模板文件夹是acrud(单数),路径为testapp/athlete/acrud/create.html
  • 但视图里设置的template_name_base = 'acruds'(复数),导致Django去查找带复数后缀的路径

你可以二选一解决:

  1. 修改模板文件夹名称:把acrud文件夹重命名为acruds,让它和视图配置的template_name_base保持一致,这样路径就和Django查找的第一个候选路径完全匹配
  2. 修改视图配置:把view.py里的template_name_base = 'acruds'改成template_name_base = 'acrud',让Django去搜索你现有的acrud文件夹下的模板

另外,也可以顺便检查下settings.py里的TEMPLATES配置,确保'APP_DIRS': True已经开启,这是Django自动识别app内templates文件夹的关键配置。

附:你的代码片段

forms.py

class AthleteForm(forms.ModelForm):
    class Meta:
        model = Athlete
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super(AthleteForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)
        self.helper.form_tag = False
        self.helper.layout = Layout(
            Tab(
                _('Basic information'),
                Field('name', wrapper_class="col-md-6"),
                Field('image', wrapper_class="col-md-6"),
            )
        )
        self.helper.layout.append(
            FormActions(
                Submit('submit', _('Submit'), css_class='btn btn-primary'),
                HTML("""{% load i18n %}<a class="btn btn-danger" href="{{ url_delete }}">{% trans 'Delete' %}</a>"""),
            )
        )

views.py

class AthleteCRUD(CRUDView):
    model = Athlete
    template_name_base = 'acruds'  # customer cruds => ccruds
    namespace = None
    check_login = True
    check_perms = True
    views_available = ['create']
    fields = ['name', 'image']
    # related_fields = ['invoice']
    custom_forms = {
        'add_': AthleteForm,
        # 'update_customer': CustomerForm,
        # 'add_addresses': AddressesForm,
        # 'update_addresses': AddressesForm,
    }
    modelforms = custom_forms

内容的提问来源于stack exchange,提问作者F128115

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:07:03