【发布时间】:2018-12-01 15:12:39
【问题描述】:
我正在使用 django 附带的默认密码重置表单。我通过在 urls.py 中添加以下代码行来更改管理站点的标题
admin.site.site_header = 'My Site Name'
但是,密码表格仍然显示“Django Administration”代替站点标题,如附图所示。我该如何改变它? Password Reset Form
【问题讨论】:
标签: django
我正在使用 django 附带的默认密码重置表单。我通过在 urls.py 中添加以下代码行来更改管理站点的标题
admin.site.site_header = 'My Site Name'
但是,密码表格仍然显示“Django Administration”代替站点标题,如附图所示。我该如何改变它? Password Reset Form
【问题讨论】:
标签: django
虽然reset_password_form.html 是从admin/base_site.html 扩展而来的。但似乎site_header 文本没有从视图发送到模板(可能是因为它不是实际管理站点的一部分,或者模板是出于示例目的)。因此,您可以从django.contrib.auth.views.PasswordResetView 创建一个新的视图子类,并通过context 传递此信息。试试这样:
from django.contrib.auth.views import PasswordResetView
from django.contrib import admin
class CustomResetPasswordView(PasswordResetView):
def get_context_data(self, **kw):
context = super().get_context_data(**kw)
context['site_header'] = getattr(admin.sites, 'site_header') # get site header text. For django 2.X it should be getattr(admin.sites.AdminSite, 'site_header')
return context
并在您的网址中使用它:
path('reset_passowrd/', CustomResetPasswordView.as_view()),
或
编写一个发送site_header的上下文处理器,像这样:
# your_app/context_processors.py
def admin_header_processor(request):
site_header = getattr(admin.sites, 'site_header') # get site header text. For django 2.X it should be
return {"site_header": site_header}
并将其添加到context_processors 内的TEMPLATES:
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'your_app.context_processors.admin_header_processor',
],
【讨论】:
site_header 是AdminSite 的属性
from django.contrib import admin,包含属性的对象是admin.site,而不是admin.sites