Django在我的.envs文件夹中查找模板(+ Django Admin)

时间:2018-05-11 14:45:13

标签: django django-templates virtualenv django-settings django-errors

我的文件夹设置如下:

~/projects/myproject/
~/.envs/myproject/

我的app文件夹如下所示:

myapp/
├── __init__.py
├── admin.py
├── forms.py
├── migrations/
├── models.py
├── tests/
├── templates/
├── urls.py
├── views.py

我刚刚实现了自定义密码重置视图,因为我想使用自己的模板。问题是,密码重置视图找不到我的模板。以下是我的观点:

class CustomPasswordResetConfirmView(views.PasswordResetConfirmView):
    success_url = reverse_lazy("accounts:password_reset_complete")
    template_name = "accounts/registration/password_reset_confirm.html"

以下是我收到的错误消息:

TemplateDoesNotExist at /auth/reset/MQ/set-password/
accounts/registration/password_reset_confirm.html.
Request Method: GET
Request URL:    http://localhost:8000/auth/reset/MQ/set-password/
Django Version: 1.11.13
Exception Type: TemplateDoesNotExist
Exception Value:    
accounts/registration/password_reset_confirm.html.
Exception Location: /Users/jan/.envs/myproject/lib/python3.6/site-packages/django/template/loader.py in select_template, line 53
Python Executable:  /Users/jan/.envs/myproject/bin/python
Python Version: 3.6.5
Python Path:    
['/Users/jan/Dev/Misc Tutorial/myproject',
 '/Users/jan/.envs/myproject/lib/python36.zip',
 '/Users/jan/.envs/myproject/lib/python3.6',
 '/Users/jan/.envs/myproject/lib/python3.6/lib-dynload',
 '/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6',
 '/Users/jan/.envs/myproject/lib/python3.6/site-packages']

如何让Django找到我的自定义模板?从错误中我可以看出他在我的虚拟环境中看起来。

我尝试像这样指定模板路径:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            [os.path.join(BASE_DIR, 'templates')]
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.contrib.auth.context_processors.auth',
                'django.template.context_processors.debug',
                'django.template.context_processors.i18n',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
                'django.template.context_processors.tz',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

我从Django文档获得的代码。不幸的是,这没有任何帮助。如果你知道如何解决这个问题,我将非常感激!

(在相关的说明中,我也尝试使用django-admin而不是manage.py,因为官方文档推荐它。但是我无法设置DJANGO_SETTINGS_MODULE env变量以便它可以工作。也许这个问题是相关的。)

编辑:帐户相关内容的应用程序称为帐户。它是一个名为templates的文件夹,包含各种其他文件夹,其中一个名为' registration'。

2 个答案:

答案 0 :(得分:1)

有点解决了。

使用manage.py来规避django-admin问题,就像pydanny建议的那样。

我错误地配置了模板。 这是我使用的新视图:

class CustomPasswordResetConfirmView(views.PasswordResetConfirmView):
    success_url = reverse_lazy("accounts:password_reset_complete")
    template_name = "registration/password_reset_confirm.html"

我还将模板文件夹放在我的项目根目录中:

myproject
  accounts/
  ...
  myproject/
  templates/

registration/文件夹现在位于此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',
            ],
        },
    },
]

答案 1 :(得分:0)

Django也在我的venv目录(我的虚拟环境目录)中寻找模板,就我而言,在将应用程序添加到主项目目录的设置文件中后,我解决了该问题。

基本上在您的应用程序目录中,有一个apps.py文件,其文件名为 *YOURAPPNAME*Config。就我而言,该应用是帐户,因此该类为AccountsConfig。然后进入主项目目录,该目录与manage.py文件位于同一目录中,打开settings.py,向下滚动到INSTALLED_APPS,然后在其中添加类。对我来说是accounts.apps.AccountsConfig