上下文未传递给被覆盖的模板
Posted
技术标签:
【中文标题】上下文未传递给被覆盖的模板【英文标题】:Context not passed to overwritten templates 【发布时间】:2021-09-10 23:52:49 【问题描述】:Django 版本 3.2.4
我正在尝试更改管理站点使用的默认 index_title
、site_header
和 site_title
。我已经尝试了所有建议here,但登录页面拒绝使用更新后的值。实际上,所需的上下文(下面示例中的site_header
)是空的(通过覆盖模板并使用here 所述的 debug
变量来确认)并且正在使用“Django 管理”的“默认”值.来自模板C:\Program Files\Python38\Lib\site-packages\django\contrib\admin\templates\admin\base_site.html
的一行:
<h1 id="site-name"><a href="% url 'admin:index' %"> site_header|default:_('Django administration') a</a></h1>
我目前在我的应用程序的admin.py
文件中覆盖了所有三个变量,并且在我登录后正在使用更新的值,但它在初始登录页面上不起作用:
admin.site.site_header = 'My Site Header'
admin.site.index_title = 'My Index Title'
admin.site.site_title = 'My Site Title'
我可以覆盖 base_site.html
模板并硬编码一个值,但我想了解为什么这是必要的,并弄清楚如何将一些上下文传递给该覆盖的模板。我已经尝试了所有覆盖here 描述的原始上下文的方法,但均无济于事。这包括拥有custom admin site 和overrides the default admin site。我还注意到在初始登录页面上没有调用 each_context 方法,但在我登录并查看管理页面后调用它。
我认为某些问题可能源于我在urls.py
中设置urlpatterns
的方式。我已将其设置为这样,因此地址栏中显示的登录 URL 对于站点的管理员和非管理员部分都是相同的。
urlpatterns = [
path('', include('my_app.urls')),
path('login', auth_views.LoginView.as_view(template_name='admin/login.html')),
path('login/', auth_views.LoginView.as_view(template_name='admin/login.html')),
path('logout', auth_views.LogoutView.as_view()),
path('logout/', auth_views.LogoutView.as_view()),
path('admin/login', generic_views.RedirectView.as_view(url='/admin', permanent=True, query_string=False)),
path('admin/login/', generic_views.RedirectView.as_view(url='/admin', permanent=True, query_string=False)),
path('admin/logout', auth_views.LogoutView.as_view()),
path('admin/logout/', auth_views.LogoutView.as_view()),
path('admin/', admin.site.urls)
]
我也专门使用django_auth_ldap.backend.LDAPBackend
:
AUTHENTICATION_BACKENDS = [
'django_auth_ldap.backend.LDAPBackend'
]
任何指导将不胜感激。
【问题讨论】:
是否也将您的自定义管理站点设为默认管理站点? docs.djangoproject.com/en/3.2/ref/contrib/admin/… 是的,我执行了“自定义”和“覆盖”部分中的步骤。 【参考方案1】:我通过创建以下上下文处理器解决了我的问题:
from django.contrib import admin
def global_context(request):
"""
This is intended to be a global context processor. Any templates rendered from views using the
`django.template.RequestContext` context (the default context used by generic views) will have this context
available to them.
"""
context =
'index_title': admin.site.index_title,
'site_header': admin.site.site_header,
'site_title': admin.site.site_title
return context
这与将admin.site.index_title
、admin.site.site_header
和admin.site.site_title
设置为admin.py
中的所需值相结合,使事情按预期工作。
【讨论】:
以上是关于上下文未传递给被覆盖的模板的主要内容,如果未能解决你的问题,请参考以下文章