2015-05-06 4 views
2

У меня есть класс, который отображает список конфигураций.Django: Расширение контекста представления на основе класса с контекстом администратора

Этот вид добавляется на сайт Django администратора, используя следующий код:

@admin.register(ZbxHostConf) 
class ZbxHostConfListViewAdmin(admin.ModelAdmin): 
    review_template = 'admin/admzbxhostconf_list.html' 

    def get_urls(self): 
     urls = super(ZbxHostConfListViewAdmin, self).get_urls() 
     my_urls = patterns('', 
          (r'^zbxhostconflist/$', self.admin_site.admin_view(self.review)), 
          ) 
     return my_urls + urls 


    def review(self, request): 
     return ZbxHostConfListView.as_view()(request) 

Шаблон расширяет admin/base_site.html шаблон. Я могу получить доступ к сайту только после входа на сайт администратора Django. К сожалению, шаблон не может получить доступ к контекстным данным, предоставленным администратором.

В документации Django предполагает, будут предоставлены данные контекста непосредственно на TemplateResponse функции:

def my_view(self, request): 
     # ... 
     context = dict(
      # Include common variables for rendering the admin template. 
      self.admin_site.each_context(request), 
      # Anything else you want in the context... 
      key=value, 
     ) 
     return TemplateResponse(request, "sometemplate.html", context) 

Для представлений функций на основе имеется возможность в extra_context аргумента, но взгляды класса на основе не обеспечивают этот аргумент. Я предполагаю, что мне нужно изменить функцию get_context_data, но я действительно не понимаю, как я могу предоставить данные контекста администратора функции get_context_data моего представления на основе класса. Какие-либо предложения?

+0

Ну не напрямую. Я только что добавил его для полноты. Но если удаление улучшит вопрос, я сделаю это. –

ответ

1

Это может быть неправильный ответ, но я полагал, что вы можете попробовать что-то вроде этого.

#!/usr/bin/python3 

from django.contrib import admin 

class MyTemplateView(TemplateView): 
    def get_context_data(self, **kwargs):  
     context = super().get_context_data(**kwargs) 
     context.update(admin.site.each_context(self.request)) 
     return context 
+0

@PhilippWiesner Это работает для вас? Я не запускал его на своем компьютере. Надеюсь, он поможет – Yeo

+0

Да, он работает нормально, данные контекста администратора отправляются вместе с обычными данными из представления. Большое спасибо :) –

Смежные вопросы