URLPatterns autogeneration mechanisms: Router

One of the key architectural concepts of CRUDLFA+ is the ability to tie a group of view with a model class to autogenerate urlpatterns. This chapter reviews the different mechanisms in place and how they are overridable.

Source is located in the Router, which we’ll describe here.

The CRUDLFA+ Router is able to generate menus checking perms, generate urls …

Note

Note that you can also use non-database backed models, by inheriting from models.Model and setting their Meta.managed attribute to False. Then, you can use CRUDLFA+ views and routers.

class crudlfap.router.Router(model=None, registry=None, views=None, **attributes)[source]

Base router for CRUDLFA+ Route.

model

Optional model class for this Router and all its views.

views

ViewsDescriptor using CRUDLFAP_VIEWS by default, otherwise your list of views.

Note

The final views list is generated by the generate_views() method.

fields

Fields that views should use by default.

json_fields

Fields that the Router serializer should use by default.

generate_views(*views)[source]

Generate views for this router, core of the automation in CRUDLFA+.

This method considers each view in given args or self.views and returns a list of usable views.

Each arg may be a view class or a dict of attributes with a _cls key for the actual view class.

It will copy the view class and bind the router on it in the list this returns.

For example, this would cause two view classes to be returned, if self.model is Artist, then CreateView will be used as parent to create ArtistCreateView and DetailView will be used to create ArtistDetailView, also setting the attribute extra_stuff='bar':

Router(Artist).generate_views([
    CreateView,
    dict(_cls=DetailView, extra_stuff='bar'),
    ListView.factory(paginate_by=12),
])
get_app_name()[source]

Generate app name for this Router views.

get_fields(view)[source]

Return the list of fields for a user.

get_menu(name, request, **kwargs)[source]

Return allowed view objects which have name in their menus.

For each view class in self.views which have name in their menus attribute, instanciate the view class with request and kwargs, call has_perm() on it.

Return the list of view instances for which has_perm() has passed.

get_namespace()[source]

Generate namespace for this Router views.

get_queryset(view)[source]

Return the queryset for a view, returns all by default.

get_urlfield()[source]

Return Field name of model for reversing url.

This will return model ` slug ` field if available or ` pk ` field.

See guess_urlfield() for detail.

get_urlpath()[source]

Return Model name for urlpath.

get_urlpatterns()[source]

Generate URL patterns for this Router views.

has_perm(view)[source]

Override this method if you don’t use a Django permission backend.

This method is called by the default has_perm implementation of the Route. This method returns the result of view.has_perm_backend() by default.

As such, if you use a Django permission backend such as crudlfap_auth.backends.ViewBackend then might not need to override this method.

register()[source]

Register to self.registry.

Also, adds the get_absolute_url() method to the model class if it has None, to return the reversed url for this instance to the view of this Router with the detail slug.

Set get_absolute_url in your model class to disable this feature. Until then, you got it for free.

Also, register this router as default router for its model class in the RouterRegistry.

class crudlfap.router.Views(iterable=(), /)[source]