27 de Enero de 2023 · 2 min de lectura
En la barra lateral del panel de administración de la barra de Wagtail podemos encontrar las páginas y navegador sobre el árbol de nuestra web.
La navegación es sencilla y cómoda para el usuario hasta el momento en que el número de páginas empieza a crecer y aparece el scroll horizontal. Aunque en el árbol solo aparece el título de las páginas, estas no están ordenadas alfabéticamente por lo que puede complicar el buscar una página en concreto.
Es por este motivo que hemos recibido varias peticiones de ordenar las páginas, para facilitar el trabajo a los editores de contenido.
Aunque la documentación no indica cómo hacerlo, al estar trabajando con un framework basado en Django, hemos podido encontrar cómo modificar este comportamiento. Para navegar por el árbol de páginas, Wagtail hace uso de su API interna de páginas, como se puede ver en la siguiente imagen:
A partir de esta URL, pudimos llegar a la vista PagesAdminAPIViewset y analizar el comportamiento.
Aprovechando la versatilidad de Django, podemos sobreescribir la vista para aplicar el criterio de ordenación deseado y capturar la URL para redirigir la petición http del CMS a nuestra vista.
Si queremos que las páginas en el árbol sean ordenadas por su título, nuestra nueva vista debería ser algo así:
# views.py
class CustomPagesAdminAPIViewSet(PagesAdminAPIViewSet):
def get_queryset(self):
qs = super().get_queryset()
return qs.order_by("title")
y deberemos añadir un nuevo router en nuestras URLs antes de las URLs de Wagtail. Para el ejemplo, se ha utilizado un proyecto donde las URLs de Wagtail están agrupadas en cms/
, por lo que cada uno tendría que ajustar las URLs a su proyecto.
# urls.py
admin_api = WagtailAPIRouter("custom_wagtailadmin_api")
admin_api.register_endpoint("pages", CustomPagesAdminAPIViewSet)
urlpatterns += [
path("cms/api/main/", admin_api.urls),
]
Una vez aplicados estos cambios, podremos ver en el administrador del CMS como las páginas en el árbol aparecen ordenadas.