管理员站点:在/ admin /的TemplateDoesNotExist

时间:2012-01-25 00:51:39

标签: python django django-admin

我正在关注Django的官方Tutorial 2但是由于某些原因,尽管按照我的理解正确地执行了所有步骤,但无法创建管理网站。

这是我得到的错误:

TemplateDoesNotExist at /admin/
admin/login.html
Request Method: GET
Request URL:    http://127.0.0.1:8000/admin/
Django Version: 1.3.1
Exception Type: TemplateDoesNotExist
Exception Value:    
admin/login.html
Exception Location: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/template/loader.py in find_template, line 138
Python Executable:  /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
Python Version: 2.7.2
Python Path:    
['/Users/jcugley/Documents/Programming/Python/Django/mysite',
 '/Library/Python/2.7/site-packages/setuptools-0.6c11-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages',
 '/Library/Python/2.7/site-packages']
Server time:    Tue, 24 Jan 2012 18:40:03 -0600

在取消注释以下行(已注释)后发生错误:

### urls.py ###
from django.conf.urls.defaults import patterns, include, url

from django.contrib import admin # THIS LINE
admin.autodiscover() # THIS LINE

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)), # THIS LINE
)

如果我再次发表评论,就可以摆脱错误。

执行在settings.py中的INSTALLED_APPS中有django.contrib.admin

16 个答案:

答案 0 :(得分:25)

我遇到了同样的问题,我不得不强迫点重新下载django。

pip install -r requirements.txt --ignore-installed --force-reinstall --upgrade --no-cache-dir

注意:我知道--no-cache-dir选项是必要的,我不确定其他选项是否都是必需的。

答案 1 :(得分:9)

我正在使用Django版本1.9.7,当我尝试将admin_tools(菜单和仪表板)添加到我的应用程序时,我遇到了类似的问题。我发现我必须做三件事:

  1. 编辑settings.py中的INSTALLED_APPS选项,如下所示(请注意,admin_tools位于django contrib之前,'mines'是我的应用程序的名称):

    INSTALLED_APPS = [
        'admin_tools',
        'admin_tools.theming',
        'admin_tools.menu',
        'admin_tools.dashboard',
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'mines'
    ]
    
  2. 编辑settings.py文件中的TEMPLATE设置,如下所示(注意添加的'loaders'选项,APP_DIRS现在设置为false ):

    TEMPLATES = [{
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': False,
        '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',
            ],
            'loaders': [
                'django.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
                'admin_tools.template_loaders.Loader',
            ],
        },
    }]
    
  3. 最后我更新了我的urls.py文件,如下所示(请注意admin_tools网址的包含):

    from django.conf.urls import include,url
    from django.contrib import admin
    from mines.views import SummaryByMapIcon
    
    urlpatterns = [
        url(r'^admin_tools/', include('admin_tools.urls')),
        url(r'^admin/', admin.site.urls),
        url(r'^summarybymapicon$', SummaryByMapIcon, name='summarybymapicon'),
    ]
    

答案 2 :(得分:6)

我通过使用--no-cache-dir选项重新安装Django解决了同样的问题:

pip uninstall django
pip install django --no-cache-dir

感谢答案here

答案 3 :(得分:4)

因为它适用于其他人的机器,并且因为你启用了app目录加载器,所以在INSTALLED_APPS中启用了管理站点,这就是发现模板所需的全部内容(我的意思是,还可以吗?) - 我只能假设您的django安装有问题。

这将是一个很好的机会开始使用virtualenvs和全新安装的django来排除你的设置:

启动终端,导航到您的项目目录(实际上并不重要......)

pip install virtualenv # if you don't have it.

virtualenv --no-site-packages env 
# this creates a virtual python environment that doesn't include system packages

source env/bin/activate
# this forces your bash session to use that environment

pip install django
# installs a fresh copy of django to your new environment

cd path_to_my_django_project    
# now go to your site directory

python manager.py runserver
# visit admin site.

答案 4 :(得分:2)

有同样的问题。奇怪的是,我发现有时{d}不会从你的django / contrib / admin复制templatemedia。因此,您需要将它们复制到虚拟env django目录。

,即您需要的/venv/lib/python2.7/site-packages/django/contrib目录

ln -s ~/Sites/your_dj_app/venv/django/contrib/admin/templates templates

ln -s ~/Sites/your_dj_app/venv/django/contrib/admin/media media

我很高兴我的问题得到了解决但却非常恼火,我不得不花一个多小时来调试它。

希望你不必:)

答案 5 :(得分:2)

从经验丰富的魔术师那里继承一个Django应用程序,我希望通过Django-admin查看它来理解该模型。由于应用程序的模型尚未在Admin中,我创建了admin.py并遇到了各种问题。我试过All-Of-The-Above(TM)并发现了这个:

  1. 我把路径搞糊涂了。我把admin.py文件放到了错误的目录中。如果你有类似.../app/app/app/app/app...的内容,请确保知道哪些app需要保留admin.py。我想通过将垃圾放入文件并注意,它不会崩溃。因此'crap'没有被执行,文件出现问题。固定的。

  2. TemplateDoesNotExist在'admin / index.html'上该应用的settings.py配置为仅以{TEMPATES BACKEND'的形式运行django.template.backends.jinja2.Jinja2。但管理员需要标准django.template.backends.django.DjangoTemplates才能使其正常运行。我read,可以配置两个模板引擎。我从不同的应用程序复制了标准块。固定的。

  3. 'li>

    TemplateDoesNotExist关于'admin / widgets / related_widget_wrapper.html'虽然管理员现在正在工作,但看着单个对象仍然被打破。我搜索了丢失的模板,发现它很好。更改TEMPLATES设置中的任何内容都不会改善任何内容。我手动插入'DIRS': []中的路径,更改了选项,删除了Jinja后端,没有。感觉就像是再次更改了错误的文件。使用调试器,我发现即使没有配置Jinja,它仍然会运行Jinja。最后,在settings.py中,我发现了这一点:

    FORM_RENDERER = 'django.forms.renderers.Jinja2'
    

    并将其评论出去了Admin。

    不知道它对应用程序的其余部分做了什么,但是为了学习它没关系。

答案 6 :(得分:1)

我遇到了类似的问题,试图为django-admin-tools

配置Django 2.0.2

最终我开始工作了。这是我的TEMPLATES设置。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': False,
        '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',
            ],
            'loaders' : [
                'django.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
                'admin_tools.template_loaders.Loader',
                ]
        },
    },
]

即使我覆盖了默认的管理模板,这仍然有效。

请务必记下django-admin-tools个应用的放置位置。请参阅上面的@Abrie Nel的答案。

答案 7 :(得分:1)

for windows user the admin_tools in the templates section should be place in the begining

   'loaders': [
            **'admin_tools.template_loaders.Loader',**    
            'django.template.loaders.filesystem.Loader',
            'django.template.loaders.app_directories.Loader',

答案 8 :(得分:1)

就我而言,我不得不将APP_DIRSFalse更改为True

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [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',
            ],
        },
    },
]

答案 9 :(得分:1)

如果您在settings.py中的TEMPLATES中进行了更改,则可能会发生此问题:

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [
        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',
        ],
    },
},]

我偶然发现了这个问题,alhamdulillah,当我将'APP_DIRS': False,更改为'APP_DIRS': True,时,我的错误就解决了

答案 10 :(得分:0)

我遇到了同样的错误,经过几次pip安装和卸载Django,它仍然无法正常工作。然后我从Django网站下载Django tar.gz文件,并从这个文件安装,一切都很好。希望这可以帮助某人。

答案 11 :(得分:0)

尽管它们有用,但上述答案是不完整的。我认为开发人员应该知道后端发生了什么,即"""是这个例外被提出来了。

正如可以在异常中看到,异常是TemplateDoesNotExist,值名称是路径,而#34; loader.py"文件。虽然我使用的是Django 1.1.4,但由于正在检查os.path.isdir(template_dir)的行(在loader.py中),我很确定会引发异常。它找不到django文件夹中的模板文件夹(目录),该文件夹位于python的Lib文件夹中的site-packages文件夹中。

直观地说,这是因为django的安装不当。然而,通过搜索来源找出异常的原因是一个很好的练习。当我的项目中出现此错误时,我没有重新安装django,而是从root(C:/ Python27 / django / contrib)复制文件夹 - 是的我使用的是Windows - 对应于site-packages中的对应文件并且它工作正常!

答案 12 :(得分:0)

我要添加一个“答案”,因为我不能用当前的“声誉”添加评论。

以下 Aaron 解决方案:

在带有Docker的Django 1.4的项目中,存在相同的问题(访问yourproject / admin / login.html或yourproject / admin / index.html)。我在python.dockerfile中使用了这个,并解决了:

"RUN pip install -r requirements.txt --no-cache-dir"

在执行此操作之前,我验证了在docker内部输入的内容,即文件夹usr / local / lib / python2.7 / site-packages / django / contrib / admin /中不存在文件夹/templates/。

在阅读这篇文章之前,我正在阅读以下内容: https://www.mail-archive.com/search?l=django-users@googlegroups.com&q=subject:%22TemplateDoesNotExist+at+%5C%2Fadmin%5C%2F%22&o=newest&f=1

答案 13 :(得分:0)

pip uninstall django
pip install django --no-cache-dir

这两个对我有用。我正在使用Django 2.2.3

答案 14 :(得分:0)

就我而言,我的INSTALLED_APPS很好,但只需要在TEMPLATE_DIRS中指向django管理模板即可。

import os #Put at the starting line

PROJECT_DIR = os.path.dirname(__file__)

TEMPLATE_DIRS = (
    ... #Another folder,
    os.path.join(PROJECT_DIR, 'relative/path/to/virtualenv/my_env/django/contrib/admin/templates'),
)

它有效

答案 15 :(得分:-1)

我认为有些软件包没有安装在INSTALLED_APPS中,在我的情况下我安装了'import_export',因为我使用'importexportmodels