【问题标题】:In password reset view custom templates not loading?在密码重置视图中自定义模板未加载?
【发布时间】:2017-06-13 05:08:46
【问题描述】:

我正在使用网址

 url('^', include('django.contrib.auth.urls')),

我在模板中有一个注册文件夹,并使用此链接工作 https://simpleisbetterthancomplex.com/tutorial/2016/09/19/how-to-create-password-reset-view.html

模板文件夹是:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
                 ],

        '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',
                "cms.utils.context_processors.permission_based_hidding_of_sidebar",
            ],
            'libraries':{
                'template_tag': 'cms.templatetags.template_tag',
                'template_tag_time': 'cms.templatetags.tags',
            }
        },
    },
]

在设置中安装应用程序:-

INSTALLED_APPS = [
    'cms',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_extensions',
    'django_csv_exports',
    'django.contrib.auth',
    'django.contrib.admin',


]

【问题讨论】:

  • 您是否在目录中创建了password_reset 模板文件?
  • 是的,我的模板中有一个注册文件夹,我在其中创建了 password_reset.html 模板
  • 您能在问题中包含您的项目结构吗?我也想知道你的注册文件夹在哪里?
  • 刚刚上传了我的项目结构,settings.py 在模板注册文件夹的底部,我有所有模板
  • 'DIRS': [os.path.dirname(os.path.dirname(os.path.abspath(file))) 你应该参考模板目录路径--------> 'DIRS': [os.path.dirname(os.path.dirname(os.path.abspath(file)), 'templates')

标签: python django


【解决方案1】:

Django 3.0。 2020. 我通过在项目目录中添加 template/registration/*.html 解决了这个问题。这解决了我的问题。我不需要更改 INSTALLED_APPS 列表中的任何内容。

步骤如下:

  1. 在“settings.py”中进行以下突出显示的更改
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')], # **ADD THIS
        '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',
                'django.template.context_processors.media',
                'django.template.context_processors.static', # * (optional)
            ],
        },
    },
]
  1. 在您的项目根文件夹中创建模板/注册目录,并在此处添加您的注册模板,而不是 your_app/templates/registration。
Project_root_folder/templetes/registration/*.html

settings.py 的 INSTALLED_APPS 中无需更改任何内容

【讨论】:

    【解决方案2】:

    请参阅下面的评论。当然,您可以破解它并删除分发库中的表单。非常非常淘气。更好的解决方案是更改应用程序在设置文件中的加载顺序。最初我有:

    INSTALLED_APPS = ['django.contrib.auth', 'ana_access',]

    我刚刚更改了这个,所以我的应用程序首先加载。瞧。做到了。

    INSTALLED_APPS = ['ana_access','django.contrib.auth', ]

    结论:如果您一直看到默认页面尽管模板/注册文件夹中有表单,那么这可能是因为您在加载默认的 django.contrib.auth 应用之前加载了自己的应用。

    【讨论】:

      【解决方案3】:

      如果您想覆盖 Django 管理模板,您需要在模板目录中创建 admin 文件夹。并将您所有管理员的文件和文件夹放在那里...

      templates
      |__ admin
          |__ registration
      

      更新:还请更正 TEMPLATES DIR 应该是

      'DIRS': [os.path.join(BASE_DIR, 'templates')],
      

      【讨论】:

      • 放置所有管理文件是指我要覆盖的文件或所有文件,因为我要覆盖的文件放在管理面板中但它不起作用。
      • 您需要正确覆盖注册模板。所以在templates中创建一个名为admin的文件夹,并放置注册文件夹...
      • 但它仍然显示 Django 模板..而不是自定义模板
      • @AbiWaqas 抱歉回复晚了。我更新了我的答案。请检查
      • 截至 2020 年 3 月:覆盖不起作用。我已经自定义了 password_reset_form.html 并将其放在我的模板/注册文件夹中。但是 Django 没有找到它。所以最后我在 /usr/local/lib/python3.6/dist-packages/django/contrib/admin/templates/registration 中找到了默认文件 password_reset_form.htm 并更改了它的名称。现在它可以工作了:django 必须转到我的本地模板(是的,非常混乱和 hacky)。
      猜你喜欢
      • 2012-11-15
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多