Since Django 2.0 introduced new system of routing I dont think kind of approach is desired anymore.
Library which greatly simplifies django urls definition! And as a side effect it makes translated urls amazingly easy. Just compare
# old urls notation
url('^detail/(?<slug>[\w-]+)', MyDetailView.as_view(), name='detail')
# easified !even translated! notation
url(U / _('detail') / slug, MyDetailView, name='detail')With the use of include_view() you can avoid urls.py and include
your app's views directly in root urls.py.
from urljects import view_include
# inside your root urls.py
urlpatterns = [
# old style
url("myapp/", include("myapp.urls")),
# new urljects style
url("myapp/", view_include("myapp.views"))
]I am glad you asked! For class based views simply inherit from URLView and add
name and url as their attributes.
from urljects import URLView, U, slug
from django.views.generic import DetailView
class ItemDetail(URLView, DetailView):
name = 'detail'
url = U / 'detail' / slugA lot of people enjoy functional views, for those there is url_view decorator.
from urljects import url_view
@url_view(U / 'category' / rest)
def detail(request, rest)
...After that you can user view_include instead of creating urls.py and
then old-style include them afterwards.
Quite often you need some urls.py - for example your root urls. Then you can
use patterns like slug or rest as shown above inside your urls.py.
We even provide modified url function to strip away the boilerplate of
.as_view(),
from urljects import U, slug, url
url_patterns = (
url(U / 'detail' / slug, view=DetailView),
# instead of
url(r'^detail/(?P<slug>[\w-]+)' , view=DetailView.as_view(),
name='detail'),
)The name of the view has been taken from DetailView.url_name.
There are also some common regular patterns like slugs and UUIDs so that you
can focus on more important stuff than on debugging regular expressions.