Я создал несколько форм с использованием представлений на основе классов, теперь мне нравится добавлять их на сайт администратора Django. Я нашел только этот link, который описывает добавление обычных просмотров на сайт администратора.Добавить класс на основе класса django на сайт администратора
ответ
as_view()
метод зрения класса на основе возвращает регулярное представление, так что вы можете вызвать его из ModelAdmin
, как это:
def review(self, request, id):
return MyReviewView.as_view()(request, id)
Пусть у вас есть следующий класс, основанный вид:
# File: views.py
class MyAwesomeBookView(TemplateView):
pass
Чтобы использовать этот взгляд, вы должны это сделать callable
# File: views.py
awesome_book_view = MyAwesomeBookView.as_view()
Как только ваш взгляд callable
, вы можете в значительной степени относиться к нему так же, как вы относитесь к функциональному виду .
Чтобы связать его с администратором ссылок, вы могли бы сделать что-то вроде этого:
# File: admin.py
@admin.register(Book)
class BookModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super().get_urls()
my_urls = [
url(r'^awesome-books/$',
self.admin_site.admin_view(awesome_book_view)),
]
return my_urls + urls
Это гораздо более правильный подход –
Вы можете пройти класс на основе вид по as_view
непосредственно, без необходимости иметь переменную как awesome_book_view
как предложили другой ответ:
Пример:
в admin.py
у меня есть:
class EmailAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(EmailAdmin, self).get_urls()
my_urls = [
url(r'^send_email/$',
self.admin_site.admin_view(SendEmailAdminView.as_view())),
]
return my_urls + urls
admin.site.register(Email, EmailAdmin)
в views.py
у меня есть:
class SendEmailAdminView(View):
def get(self, request):
pass
def post(self, request):
pass
Я удалил большую часть кода для краткости и сохранил только соответствующую часть. Вы можете увидеть полный список code here.
Для полной интеграции с шаблонами администратора Django, вы можете передать модель админа в качестве дополнительного аргумента в ОЦК, а затем использовать его, чтобы добавить немного сахара в контексте:
файл admin.py:
from django.contrib import admin
from .models import MyModel
from .views import ProcessObjectView
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
info = self.model._meta.app_label, self.model._meta.model_name
urls = super(MyModelAdmin, self).get_urls()
my_urls = patterns('',
url(r'^(?P<object_id>.*)/process/$',
self.admin_site.admin_view(ProcessObjectView.as_view()),
{'model_admin': self, },
name="%s_%s_process" % info),
)
return my_urls + urls
файл views.py
from django.contrib.auth import get_permission_codename
class ProcessObjectView(UpdateView):
model = MyModel
pk_url_kwarg = "object_id"
fields = [... ]
template_name = 'admin/backend/mymodel/process_object.html'
def get_context_data(self, **kwargs):
context = super(ProcessObjectView, self).get_context_data(**kwargs)
# see http://www.slideshare.net/lincolnloop/customizing-the-django-admin
model_admin = self.kwargs['model_admin']
opts = model_admin.model._meta
admin_site = model_admin.admin_site
has_perm = self.request.user.has_perm(opts.app_label + '.' + get_permission_codename('change', opts))
context.update({
'admin_site': admin_site.name,
'title': 'Process: ' + str(self.get_object()),
'opts': opts,
'app_label': opts.app_label,
'has_chage_permission': has_perm,
})
return context
файл process_object.html:
{% extends "admin/change_form.html" %}
{% load i18n utils_tags %}
{% block content %}
...
- 1. Ссылка на сайт администратора django
- 2. Django: Расширение контекста представления на основе класса с контекстом администратора
- 3. Как добавить пользовательский контроль на сайт администратора django?
- 4. Как добавить readonly_field в сайт администратора django?
- 5. Добавить класс на основе сайта
- 6. Добавить работу cron в django на основе настроек администратора
- 7. Добавить контекст на каждую страницу администратора Django
- 8. Перенаправление на сайт администратора
- 9. Как защитить сайт администратора django?
- 10. Перенаправление на внешнюю страницу из класса на основе класса django
- 11. Django класс на основе просмотр и комментарии
- 12. Добавление функции забытого пароля на сайт администратора Django
- 13. Сайт администратора Django с mongodb
- 14. Невозможно войти на сайт администратора в localhost
- 15. Класс на основе Django - Thread Safe
- 16. Как добавить функцию «выход» на администратора сайта в Django
- 17. Представления на основе класса Django: вызов (пересылка на другой) на основе класса.
- 18. Django ManyRelatedManager фильтрация на основе класса
- 19. Добавить класс на основе атрибута стиля
- 20. jquery - Добавить класс на основе вертикального прокрутки
- 21. Django класса на основе вид переменных экземпляра
- 22. Сайт администратора Django не отображает отношения ManyToManyField
- 23. Добавить класс CSS на основе ID
- 24. функция Django на основе вид на основе зрения класса
- 25. Добавить активный класс на основе URL-адреса?
- 26. Как добавить класс на основе переменной
- 27. Добавить поле изображения в admin.auth сайт администратора в django
- 28. Django, перенаправление сотрудников с входа на сайт администратора
- 29. Не удается войти на сайт администратора в Django
- 30. Django Не перенаправляется на сайт администратора после входа в систему
Добро пожаловать в SO. Приготовьтесь к забвению. :) Пожалуйста, прочтите [эти] (http://stackoverflow.com/help/how-to-ask) рекомендации по формированию подробных, полезных вопросов. – grill
Тема на самом деле интересна, но вы делаете ее вверх дном, задавая «Nothing» ... @PhilippWiesner, предложение: просто реализуйте то, что вы прочитали в ссылке. – Yeo
Итак, возможно, это может быть ваш реальный вопрос;) http://stackoverflow.com/questions/30079979/django-extend-context-of-class-based-view-with-admin-context – Yeo