Package: rendertron
Python RendertronRendertron middleware for Python applications.Rendertronis a headless Chrome
rendering solution designed to render & serialise web pages on the fly. The
goal of this package is to provide middleware to render a request using a
Rendertron service and make the result available.This makes it possible to for example render Progressive Web Apps (PWA), wait
for it to fully render (completes initial data loading etc.) and use that
fully built markup as a response.Besides the fact that your user will see a fully rendered application faster it
also allows search engines to properly index the markup.InstallingInstall a Rendertron service by following the steps inthe documentation.Install this package usingpip:pipinstallrendertronYou can also install the latest development version usingpip's-eflag:pipinstall-egit://git@github.com:frontendr/python-rendertron.git@develop#egg=rendertronThis will install thedevelopbranch.DjangoFirst, add'rendertron'to theINSTALLED_APPSlist in settings.Then you have 2 choices:Enable themiddlewareand render everything that matches eitherRENDERTRON_INCLUDE_PATTERNSor does not matches anything inRENDERTRON_EXCLUDE_PATTERNS. See the Configuration section for more information about
those.Decorate specific views with the@rendertron_renderdecorator to only let render
those views with the Rendertron service.MiddlewareAdd'rendertron.middleware.DjangoRendertronMiddleware'to theMIDDLEWARElist in the settings.Make sure to specify eitherRENDERTRON_INCLUDE_PATTERNSto specify path patterns
which are to be rendered by the Rendertron service orRENDERTRON_EXCLUDE_PATTERNS_EXTRAto only specify what to exclude.Decorate specific viewsInstead of relying on the middleware and settings it is also possible to decorate
specific views with the@rendertron_renderdecorator.fromrendertron.decorators.djangoimportrendertron_render@rendertron_renderdefmy_view(request):...For class based views use Django'smethod_decorator.fromdjango.utils.decoratorsimportmethod_decoratorfromdjango.views.genericimportTemplateViewfromrendertron.decorators.djangoimportrendertron_render@method_decorator(rendertron_render,name="dispatch")classMyView(TemplateView):...ConfigurationMost configuration is done by specifying specific variables. For Django users
that's done in your site's settings.The following settings are available:SettingDefaultDescriptionRENDERTRON_BASE_URL'http://localhost:3000/'The url the Rendertron service is listening on.RENDERTRON_RENDER_QUERY_PARAM'rendertron_render'The query parameter added to the request url passed to Rendertron. This is used to differentiate normal requests with requests from Rendertron.RENDERTRON_STORAGESee StorageAn object literal specifying and configuring the storage class to be used. See the Storage section for more information.RENDERTRON_INCLUDE_PATTERNS[]A list of regular expression patterns to include. Once a pattern in this list matches the request no further checking will be done.RENDERTRON_EXCLUDE_PATTERNSList of common extensions.By default this is a list of common static file type extensions used on the web. If Django is detected it'sSTATIC_URLandMEDIA_URLpaths are added to the list. Note that if you override this setting all defaults are gone. If you want to keep these defaultsandadd your own patterns useRENDERTRON_EXCLUDE_PATTERNS_EXTRA.RENDERTRON_EXCLUDE_PATTERNS_EXTRA[]LikeRENDERTRON_EXCLUDE_PATTERNSbut will be appended to that list.StorageStorage classes are handling the logic of storing the results coming from the
Rendertron service for a period of time. They handle if, how, where and how
long a result is stored. There are some core storage classes available the
system is built for it to be very easy to built your own.The choice of one of the built in storage classes depends on your framework.Any framework:DummyStorageA storage class that doesn't do anything. It doesn't store and will never return
a stored result.To use it simply setRENDERTRON_STORAGE['CLASS']to'rendertron.storage.DummyStorage'. It has no options.Django:DjangoCacheStorageA storage class that utilizes Django's cache framework to store the results.To use it simply setRENDERTRON_STORAGE['CLASS']to'rendertron.storage.DjangoCacheStorage'. It has the following options:SettingDefaultDescriptionTIMEOUTDjango'sDEFAULT_TIMEOUTcache setting which is300(5 minutes)The number of seconds the result should be stored in the cache. It's thetimeoutargument for Django'scache.setmethod.VERSIONNoneTheversionargument which is passed to Django'scache.setmethod.Example config:RENDERTRON_STORAGE={'CLASS':'rendertron.storage.DjangoCacheStorage','OPTIONS':{'TIMEOUT':300,}}Running testsFirst install Django to be able to test Django related things.pipinstalldjangoThen run the tests viadjango-adminusing the provided minimal settings file.django-admintest--pythonpath.--settingstests.django.settingsLicenseMIT