Django 嵌套内联 TemplateDoesNotExist

Posted

技术标签:

【中文标题】Django 嵌套内联 TemplateDoesNotExist【英文标题】:Django nested inline TemplateDoesNotExist 【发布时间】:2015-04-28 03:07:02 【问题描述】:

错误

我正在尝试使用django-nested-inline 包。似乎一切正常,但是当我尝试使用管理网站创建新的Course 时,出现以下错误:

TemplateDoesNotExist at /admin/courses/course/5/

admin/edit_inline/stacked-nested.html

当然,admin/edit_inline/stacked-nested.html 只是不存在,因为模板渲染时出错了:

Error during template rendering

In template C:\...\django\contrib\admin\templates\admin\change_form.html, error at line 62

admin/edit_inline/stacked-nested.html

60 % block inline_field_sets %
61 % for inline_admin_formset in inline_admin_formsets %
62     % include inline_admin_formset.opts.template %
63 % endfor %
64 % endblock %

如你所见,当 Django 尝试渲染时出现了问题

% include inline_admin_formset.opts.template %

我的代码

这是我的admin.py,但我认为它与上述错误无关:

from django.contrib import admin
from nested_inline.admin import NestedStackedInline, NestedModelAdmin
from courses.models import Course, Skill, Note

class NoteInline(NestedStackedInline):
    model = Note
    extra = 0

class SkillInline(NestedStackedInline):
    model = Skill
    extra = 0
    inlines = [NoteInline]

class CourseAdmin(NestedModelAdmin):
    inlines = [SkillInline]

admin.site.register(Course, CourseAdmin)

这是我的models.py

from django.db import models

class Course(models.Model):
    course_name = models.CharField(max_length=200)
    course_description = models.CharField(max_length=1000, default='Course Description')
    course_subject = models.CharField(max_length=200, default='No Subject')

    def num_skills(self):
        return len(self.skill_set.all())

    def __unicode__(self):
        return self.course_name

    def __str__(self):
        return unicode(self).encode('utf-8')

class Skill(models.Model):
    course = models.ForeignKey(Course)
    skill_name = models.CharField(max_length=200)
    skill_description = models.CharField(max_length=1000, default='Skill Description')

    def __unicode__(self):
        return self.skill_name

    def __str__(self):
        return unicode(self).encode('utf-8')

class Note(models.Model):
    skill = models.ForeignKey(Skill)
    note_text = models.CharField(max_length=1000, default='...note text...')

    def __unicode__(self):
        return self.note_text

    def __str__(self):
        return unicode(self).encode('utf-8')

我注意到的事情

django-nested-inline 两天前从 0.3.3 更新到 0.3.4。更新版本“添加了许可证并为 python 3 更新”。我使用的是 0.3.4,但也使用 Python 2.7,而不是 Python 3。但是,我卸载了 0.3.4,安装了 0.3.3,然后再次尝试。这不起作用并产生了同样的错误。我已经卸载了 0.3.3 并重新安装了 0.3.4。 当我尝试通过管理站点添加新的Course 时,管理站点和站点本身不会崩溃。

【问题讨论】:

【参考方案1】:

您的nested_inline 应用似乎没有安装,否则 django 将能够找到模板。 要么将模板添加到 TEMPLATE_DIRS 设置引用的目录,要么更改内联的模板名称。

根据您提供的链接中的用法:将 nested_inline 添加到 INSTALLED_APPS

【讨论】:

以上是关于Django 嵌套内联 TemplateDoesNotExist的主要内容,如果未能解决你的问题,请参考以下文章

Django嵌套内联

django admin 内联(和嵌套内联):我怎样才能获得这个功能?

在 Django 管理员中嵌套内联?

Django Admin Cookbook-23如何在Django admin中添加嵌套的内联

如何在 Django 的表单中拥有嵌套的内联表单集?

在 django admin 中为内联项目添加完整更改表单的链接?