【问题标题】:Context not passed to overwritten templates上下文未传递给被覆盖的模板
【发布时间】:2021-09-10 23:52:49
【问题描述】:

Django 版本 3.2.4

我正在尝试更改管理站点使用的默认 index_titlesite_headersite_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 siteoverrides 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'
]

任何指导将不胜感激。

【问题讨论】:

标签: django django-templates django-admin django-auth-ldap


【解决方案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_titleadmin.site.site_headeradmin.site.site_title 设置为admin.py 中的所需值相结合,使事情按预期工作。

【讨论】:

    猜你喜欢
    • 2020-11-17
    • 2023-03-22
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2013-03-13
    • 1970-01-01
    • 2014-11-04
    相关资源
    最近更新 更多