模式r'^' 将匹配任何也匹配r'^admin/' 的东西。 Django 从urlpatterns 的开头开始执行 URL 匹配,并不断进行直到找到 first 匹配。因此,在这种情况下,应该在 admin 中的内容与 '^' 匹配,即 flightdb.urls 将无法找到它们。您可以通过重新排序网址来解决此问题,如下所示:
urlpatterns = [
url(r'^admin/', include('nested_admin.urls')),
url(r'^', include('flightdb.urls')),
]
现在在其他顶级 URL 之前检查 admin 是否匹配。
编辑:我怀疑您的问题来自于在您的 url 模式中使用“admin”以转到默认 Django 管理包以外的其他地方。我在django-nested-admin 的源代码中进行了一些搜索,特别是在这里遇到了一些东西:
https://github.com/theatlantic/django-nested-admin/blob/master/nested_admin/options.py 特别看看第 275 行:
context = {
'title': _('Add %s') % force_unicode(opts.verbose_name),
'adminform': adminForm,
'is_popup': (IS_POPUP_VAR in request.POST or
IS_POPUP_VAR in request.GET),
'show_delete': False,
'media': mark_safe(media),
'inline_admin_formsets': inline_admin_formsets,
'errors': helpers.AdminErrorList(form, formsets),
'root_path': reverse('admin:index'),
'app_label': opts.app_label,
}
这里有一个电话给reverse('admin:index')。这需要解析为通常的admin 路径才能工作。当你像你一样定义你的 url 时,你会遇到 admin 现在不是 django-nested-admin 期望看到的默认值的问题。
也许尝试另一种不是“管理员”的 url 模式,例如他们的文档中建议的模式:
url(r'^nested_admin/', include('nested_admin.urls')),
这样 django-nested-admin 包内部使用的reverse 就可以工作了。