【问题标题】:Django looks for templates in my .envs folder (+ Django Admin)Django 在我的 .envs 文件夹中查找模板(+ Django Admin)
【发布时间】:2018-10-22 00:30:40
【问题描述】:

我的文件夹是这样设置的:

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

我的应用文件夹如下所示:

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 环境变量使其工作。也许这个问题是相关的.)

编辑:与帐户相关的应用程序称为帐户。里面有一个叫templates的文件夹,里面放着各种其他的文件夹,一个叫'registration'。

【问题讨论】:

  • 您的模板名称末尾有一个额外的.。但是您的问题不清楚;您尝试使用的模板在哪里?您显示的唯一应用程序称为“myapp”;您有单独的帐户应用程序吗?是否有“模板/注册”目录?
  • @DanielRoseman 感谢您的帮助。是的,我删除了这一点,它仍然会引发同样的错误。是的,我有一个单独的帐户应用程序。在问题中添加了上下文。您也正确的是,帐户应用程序中有一个模板/注册目录。我刚刚将示例应用程序称为 myapp。
  • 来自文档:“manage.py 与 django-admin 做同样的事情,但会为您处理一些事情:1)它将您的项目包放在 sys.path 上。2)它设置DJANGO_SETTINGS_MODULE 环境变量,使其指向您项目的 settings.py 文件。”转到 manage.py,您可能会发现配置 Django 项目更容易。
  • 谢谢@pydanny。那我就用manage.py吧!你知道是什么导致 Django 只在 .envs 文件夹中查找模板吗?
  • 没有看到整个源代码,我无法开始诊断原因。

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


【解决方案1】:

有点解决了。

正如pydanny 建议的那样,使用manage.py 绕过了django-admin 问题。

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

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',
            ],
        },
    },
]

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 可能是一个很好的答案,但如果您更详细地解释您的答案将会很有帮助。 WHICH 设置文件,在 WHAT 位置,以及如何添加它?
    • 您无需使用“编辑:”突出显示您的编辑。您的答案下方有一个编辑历史记录链接,它将显示已添加的内容。嗨,欢迎来到 SE.SO 顺便说一句... :-)
    猜你喜欢
    • 2020-03-23
    • 2013-03-02
    • 1970-01-01
    • 2017-01-10
    • 2015-08-05
    • 1970-01-01
    • 2017-08-23
    • 2015-09-22
    • 2021-10-22
    相关资源
    最近更新 更多