Django:TemplateDoesNotExist at /login/(源不存在)

K s*_*str 4 python authentication django templates

我正在尝试进入 Django,我正在这里和那里学习教程。我正在尝试从官方 Django 教程中向投票应用程序添加登录页面,但即使我按照这个简单的教程进行操作,我还是收到了TemplateDoesNotExist error. 不过,据我所知,Django 正在寻找login.html正确的目录,并给出消息 Source 不存在。

我的文件结构:

??? db.sqlite3
??? manage.py
??? secvot
?   ??? __init__.py
?   ??? __init__.pyc
?   ??? settings.py
?   ??? settings.pyc
?   ??? templates
?   ?   ??? admin
?   ?   ?   ??? base_site.html
?   ?   ??? registration
?   ?       ??? login.html
?   ?       ??? logout.html
?   ??? urls.py
?   ??? urls.pyc
?   ??? wsgi.py
?   ??? wsgi.pyc
??? voting
    ??? admin.py
    ??? admin.pyc
    ??? apps.py
    ??? apps.pyc
    ??? __init__.py
    ??? __init__.pyc
    ??? migrations
    ?   ??? 0001_initial.py
    ?   ??? 0001_initial.pyc
    ?   ??? 0002_auto_20180301_2354.py
    ?   ??? 0002_auto_20180301_2354.pyc
    ?   ??? __init__.py
    ?   ??? __init__.pyc
    ??? models.py
    ??? models.pyc
    ??? static
    ?   ??? voting
    ?       ??? images
    ?       ?   ??? background.gif
    ?       ??? style.css
    ??? templates
    ?   ??? voting
    ?       ??? detail.html
    ?       ??? index.html
    ?       ??? results.html
    ??? tests.py
    ??? tests.pyc
    ??? urls.py
    ??? urls.pyc
    ??? views.py
    ??? views.pyc
Run Code Online (Sandbox Code Playgroud)

设置.py:

INSTALLED_APPS = [
    'voting.apps.VotingConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'secvot.urls'

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',
            ],
        },
    },
Run Code Online (Sandbox Code Playgroud)

secvot/urls.py:

from django.conf.urls import include, url
from django.contrib import admin
from django.contrib.auth import views as auth_views

urlpatterns = [
    url(r'^login/', auth_views.login, {'template_name': 'registration/login.html'}, name='login.html'),
    url(r'^logout/', auth_views.logout, name='logout'),
    url(r'^polls/', include('voting.urls')),
    url(r'^admin/', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)

登录.html:

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <form method="POST">
        {% csrf_token %}
        <p>
            <label>Username</label>
            <input type="text" name="username">
        </p>
        <p>
            <label>Password</label>
            <input type="password" name="password">
        </p>
        <button type="submit">Login</button>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

和错误页面的一部分:

TemplateDoesNotExist at /login/
registration/login.html
Request Method: GET
Request URL:    http://127.0.0.1:8000/login/
Django Version: 1.11
Exception Type: TemplateDoesNotExist
Exception Value:    
registration/login.html
Exception Location: /home/kostis/.virtualenvs/secretvoting/local/lib/python2.7/site-packages/django/template/loader.py in select_template, line 53
Python Executable:  /home/kostis/.virtualenvs/secretvoting/bin/python
Python Version: 2.7.12
Python Path:    
['/home/kostis/PycharmProjects/secvot',
 '/home/kostis/.virtualenvs/secretvoting/lib/python2.7',
 '/home/kostis/.virtualenvs/secretvoting/lib/python2.7/plat-x86_64-linux-gnu',
 '/home/kostis/.virtualenvs/secretvoting/lib/python2.7/lib-tk',
 '/home/kostis/.virtualenvs/secretvoting/lib/python2.7/lib-old',
 '/home/kostis/.virtualenvs/secretvoting/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/home/kostis/.virtualenvs/secretvoting/local/lib/python2.7/site-packages',
 '/home/kostis/.virtualenvs/secretvoting/lib/python2.7/site-packages']


Template-loader postmortem
Django tried loading these templates, in this order:

Using engine django:

django.template.loaders.filesystem.Loader: /home/kostis/PycharmProjects/secvot/templates/registration/login.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/kostis/PycharmProjects/secvot/voting/templates/registration/login.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/kostis/.virtualenvs/secretvoting/local/lib/python2.7/site-packages/django/contrib/admin/templates/registration/login.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/kostis/.virtualenvs/secretvoting/local/lib/python2.7/site-packages/django/contrib/auth/templates/registration/login.html (Source does not exist)
Run Code Online (Sandbox Code Playgroud)

据我所知,Django 尝试加载正确的模板,查看正确的文件夹,但即使模板在那里,也显示错误“源不存在”。

关于我可能做错了什么的任何想法?

Ala*_*air 9

'DIRS': [os.path.join(BASE_DIR, 'templates')],
Run Code Online (Sandbox Code Playgroud)

这告诉 Djangotemplates在您的项目目录中查找一个目录(包含manage.py. 的目录。但是您的模板目录在您的内部项目目录中(包含settings.py.

您可以通过执行以下操作之一来修复它:

  1. 移动模板目录
  2. 更改DIRS设置以指向模板目录的当前位置。

    'DIRS': [os.path.join(BASE_DIR, 'secvot', 'templates')],
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加secvot到您的,INSTALLED_APPS以便app_directories加载程序找到模板目录。如果您这样做,您可以更改DIRS[]