上下文未传递到被覆盖的模板中。
上下文未传递到被覆盖的模板中。
Django版本为3.2.4。\n我试图更改管理网站使用的默认`index_title`、`site_header`和`site_title`。我尝试了所有在这里建议的方法,但登录页面拒绝使用更新后的值。实际上,所需的上下文(以下示例中的`site_header`)为空(通过覆盖模板并使用`{{ debug }}`变量进行确认,如此处所述),并且正在使用“默认”值“Django administration”。模板`C:\\Program Files\\Python38\\Lib\\site-packages\\django\\contrib\\admin\\templates\\admin\\base_site.html`中的一行代码如下:\n
{{ site_header|default:_('Django administration') }} a
\n我目前在我的应用程序的`admin.py`文件中重写了所有三个变量,并且在登录后使用的是更新后的值,但在初始登录页面上不起作用:\n
admin.site.site_header = 'My Site Header' admin.site.index_title = 'My Index Title' admin.site.site_title = 'My Site Title'
\n我可以覆盖`base_site.html`模板并硬编码一个值,但我想了解为什么需要这样做,并找出如何将一些上下文传递到被覆盖的模板中。我已经尝试了所有在此处描述的覆盖原始上下文的方法,但都没有成功。这包括拥有一个自定义的管理网站,它覆盖了默认的管理网站。我还注意到初始登录页面上没有调用`each_context`方法,但在登录后并查看管理页面时会调用该方法。\n我认为问题的一部分可能源于我在`urls.py`中如何设置`urlpatterns`。我将其设置为这样,以便登录的地址栏显示在网站的管理和非管理部分中是相同的。\n
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) ]
\n我还仅使用`django_auth_ldap.backend.LDAPBackend`:\n
AUTHENTICATION_BACKENDS = [ 'django_auth_ldap.backend.LDAPBackend' ]
\n希望能得到指导。
(Context not passed to overwritten templates)这个问题的出现的原因是在使用Django的通用视图时,如果在模板中使用了自定义的context_processor,那么默认的context将不会被传递给模板。解决这个问题的方法是创建一个全局的context_processor,并将其与Django admin的设置进行结合。
首先,需要创建一个名为global_context的context_processor,并将其放置在适当的位置。这个context_processor的作用是将admin的一些设置添加到context中,以便在模板中使用。下面是一个示例的global_context的代码:
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.py文件中设置admin的相关属性,以确保它们被正确地传递给模板。下面是一个示例的admin.py的代码:
from django.contrib import admin admin.site.index_title = "My Admin" admin.site.site_header = "My Admin Site" admin.site.site_title = "My Admin Site"
通过将这个global_context的context_processor与Django admin的设置结合起来,就可以解决(Context not passed to overwritten templates)的问题。这样,在使用通用视图渲染模板时,自定义的context_processor将包含admin的设置,以便在模板中使用这些设置。