template - Django vista personalizada en la página de administración
extends django template tag (4)
He creado una vista personalizada.
¿Cómo puedo insertar la vista en el administrador?
Para una clase de administrador normal, simplemente podemos registrarlo en el sitio de administración:
class ListAdmin(admin.ModelAdmin):
...
admin.site.register(List, ListAdmin)
Intenté anular get_url en admin.py, question_list es la vista:
class ListAdmin(admin.ModelAdmin):
def list_view(self, request):
return question_list(request)
def get_urls(self):
urls = super(ListAdmin, self).get_urls()
list_urls = patterns('''', r''^list/$'', self.list_view())
return list_urls + urls
admin.site.register(question_list, ListAdmin)
Esta es la vista question_list:
def question_list(request):
#questions = Question.objects.filter(topic__icontains = 1)
questions = Question.objects.all()
return render_to_response(''admin/question_list.html'', {''questions'':questions})
question_list = staff_member_required(question_list)
Obtengo objeto ''función'' no es error iterable.
Gracias.
Debe anular get_urls
en su subclase ModelAdmin
.
El patrón obtiene una vista, no el resultado de llamarla, es decir:
list_urls = patterns('''', r''^list/$'', self.list_view())
debiera ser
list_urls = patterns('''', r''^list/$'', self.list_view)
Además, "list_view" (en esta etapa) es una vista como cualquier otra. Por lo tanto, tendrá que devolver un objeto HttpResponse.
def list_view(self, request):
return question_list(request)
No está mostrando el código para question_list () pero tengo la sospecha de que no está devolviendo un HttpResponse.
PD: Si proporcionó el rastreo de la excepción "el objeto '''' función ''no es iterable" (¿está obteniendo esto cuando visita "lista /"?) Habría menos conjeturas.
En función de la información que proporcionó, debe consultar esta parte de la documentación de Django:
Agregar vistas a los sitios de administración (nota: el enlace es válido para la versión 1.5, ya que la versión 1.3 ya no es compatible, la solución sigue siendo válida).
Luego, puedes consultar esta publicación del blog y esta question para obtener más información y detalles.
Basado en su ejemplo, realmente no entiendo por qué simplemente no usa un ModelAdmin
regular con algunas opciones de filtrado :
class QuestionAdmin(admin.ModelAdmin):
list_filter = (''topic'',)
Este es un ejemplo de todo lo necesario para agregar (a partir de Django 1.6) para una página personalizada que se vinculará desde un botón al lado del botón "Historial" en la parte superior derecha de la página de detalles de un objeto: