def path(pattern, view, name=None, **kwargs): """ Simplifies django.urls.path :param pattern: URL pattern, same syntax as django.urls.path :param view: View, can be class or function :param name: Name used for reverse, defaults to view.name if exists :param kwargs: Keyword arguments for the view :return: An object that can be added to urlpatterns """ if name is None: try: name = view.name except AttributeError: pass if name is None: logger.warning(f'Path {pattern} to view {view} missing name.') try: if issubclass(view, View): # logger.debug(f'URL View {view} = {name}') return _path(pattern, view.as_view(), kwargs=kwargs, name=name) except TypeError: pass if isinstance(view, str): return _path(pattern, TemplateView.as_view(template_name=view), kwargs=kwargs, name=name) return _path(pattern, view, name=name, kwargs=kwargs)
def _get_self_urls(self) -> _typing.Iterator: if self.LIST_ACTIONS: yield _path( '', view=self._list_view, name=self._list_view_name, ) if self.DETAIL_ACTIONS: yield _path( self._detail_route, view=self._detail_view, name=self._detail_view_name, )
def _get_self_urls(self) -> _typing.Iterator: yield _path( '', view=self.__view, name=self.__name, **self.__kwargs, )
def urls(self): self.verbose_name = get_verbose_name(self.Model) self.verbose_name_plural = self.Model._meta.verbose_name_plural self.list_url = self.verbose_name_plural self.list_ajax_url = "list_ajax_%s" % self.verbose_name self.add_url = "add_%s" % self.verbose_name self.delete_url = "delete_%s" % self.verbose_name self.edit_url = "edit_%s" % self.verbose_name urls = [] if ('list' in self.methods): urls += [_path('', self.list, name=self.list_url)] if ('list-ajax' in self.methods): urls += [ _path('list-ajax/', self.list_ajax, name=self.list_ajax_url) ] if ('add' in self.methods): urls += [_path('add/', self.add, name=self.add_url)] if ('delete' in self.methods): urls += [ _path('<int:pk>/delete/', self.delete, name=self.delete_url) ] if ('edit' in self.methods): urls += [_path('<int:pk>/', self.edit, name=self.edit_url)] if self.verbose_name in self.add_urls: for url in self.add_urls[self.verbose_name]: urls += [_path(url["path"], url["func"], name=url["name"])] return include(urls)
from django.urls import path as _path from . import views as _views urlpatterns = [ _path("create-list/", _views.create_list, name="create-list"), _path("<int:list_id>/add-item/", _views.add_item, name="add-item"), ]
def path(route, view, kwargs=None, name=None): if not name: name = get_view_name(view) return _path(route, view, kwargs=kwargs, name=name)
def _get_nested_urls(self) -> _typing.Iterator: for route, router in self._nested.items(): yield _path( route, _include(router.urls), )
def _get_self_urls(self) -> _typing.Iterator: yield _path( '', view=self._view, )
from django.urls import path as _path from . import views as _views urlpatterns = [ _path("create-account/", _views.create_account, name="create-account"), _path("logout/", _views.logout, name="logout"), _path("login/", _views.login, name="login"), ]
from django.urls import path as _path from . import views as _views urlpatterns = [ _path("lists/", _views.ListAPIView.as_view(), name="lists"), _path("lists/<int:list_id>/", _views.ListDetailAPIView.as_view(), name="list-detail"), ]
from django.contrib import admin from django.urls import path as _path, include as _include urlpatterns = [ _path("admin/", admin.site.urls), _path("", _include("accounts.urls")), _path("", _include("pages.urls")), _path("api/", _include("lists.api.urls")), _path("lists/", _include("lists.urls")), ]
def _get_nested_urls(self) -> _typing.Iterator: yield _path( self._detail_route, _include(list(super()._get_nested_urls())), )
from django.urls import path as _path from . import views as _views urlpatterns = [ _path( "", _views.index, name="index", ), ]