Is it better to use path() or url() in urls.py for django 2.0?
In a django online course, the instructor has us use the url() function to call views and utilize regular expressions in the urlpatterns list. I've seen other examples on youtube of this. e.g. from django.contrib import admin from django.urls import include from django.conf.urls import url urlpatterns = [ path('admin/', admin.site.urls), url(r'^polls/', include('polls.urls')), ] #and in polls/urls.py urlpatterns = [ url(r'^$', views.index, name="index"), ] However, in going through the Django tutorial, they use path() instead e.g.: from django.urls import path from . import views urlpatterns = [ path('', views.index, name="index"), ] Furthermore regular expressions don't seem to work with the path() function as using a path(r'^$', views.index, name="index") won't find the mysite.com/polls/ view. Is using path() without regex matching the proper way going forward? Is url() more powerful but more complicated so they're using path() to start us out with? Or is it a case of different tools for different jobs?
From Django documentation for url
url(regex, view, kwargs=None, name=None)This function
is an alias to
django.urls.re_path(). It’s likely to be deprecated in
a future release.
You can use
re_path for complex regex calls and use just
path for simpler lookups
django.urls.path() function allows a simpler, more readable URL routing syntax. For example, this example from previous Django releases:
could be written as:
django.conf.urls.url() function from previous versions is now available as
django.urls.re_path(). The old location remains for backwards compatibility, without an imminent deprecation. The old
django.conf.urls.include() function is now importable from
django.urls so you can use:
from django.urls import include, path, re_path
in the URLconfs. For further reading django doc
path is simply new in Django 2.0, which was only released a couple of weeks ago. Most tutorials won’t have been updated for the new syntax.
It was certainly supposed to be a simpler way of doing things; I wouldn’t say that URL is more powerful though, you should be able to express patterns in either format.
Regular expressions don’t seem to work with the
path() function with the following arguments:
path(r'^$', views.index, name="index").
It should be like this:
path('', views.index, name="index").
The 1st argument must be blank to enter a regular expression.
Path is a new feature of Django 2.0.
Explained here :
Look like more pythonic way, and enable to not use regular expression in argument you pass to view… you can ue int() function for exemple.
From v2.0 many users are using path, but we can use either path or url.
For example in django 2.1.1
mapping to functions through url can be done as follows
from django.contrib import admin from django.urls import path from django.contrib.auth import login from posts.views import post_home from django.conf.urls import url urlpatterns = [ path('admin/', admin.site.urls), url(r'^posts/$', post_home, name='post_home'), ]
where posts is an application & post_home is a function in views.py
- Database Administration Tutorials
- Programming Tutorials & IT News
- Linux & DevOps World
- Entertainment & General News
- Games & eSport