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.

Key difference between path and re_path is that path uses route without regex

You can use re_path for complex regex calls and use just path for simpler lookups

Django 2.0 url() to path() cheatsheet, Django 2.0 introduced a new way to define URLs, which greatly In Django 2.0, you use the path() method with path converters to capture URL parameters. I've been working with Django for more than 10 years now and still June 27, 2018 at 11:30 am. Hey,. In my urls.py, I had the following : url('^. Django 2.0 introduced a new way to define URLs, which greatly simplifies how parameters are captured. In earlier versions of Django, you had to use the url() method and pass a regular expressions with named capturing groups to capture URL parameters.

The new django.urls.path() function allows a simpler, more readable URL routing syntax. For example, this example from previous Django releases:

url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)

could be written as:

path('articles/<int:year>/', views.year_archive)

The 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

django.urls functions for use in URLconfs, from django.urls import include, path urlpatterns = [ path('index/', views.index, The route argument should be a string or gettext_lazy() (see Translating URL patterns) that See How Django processes a request for more details. A function that takes a full Python import path to another URLconf module that should be  I am trying to learn Django. However, that tutorial is using url() function inside url.py rather than path. I was checking documentation about path() but I am a bit confused.

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.

Django - URL Mapping, What is the difference between path and URL in Django? I am currently learning Django. Until now I was working with Django 1.1 but now I am working with Django 2.0. Django 2.0 uses path() instead of url() and I don't quiet understand that.

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.

Django URLs · Django Girls Tutorial, 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  The django community on Reddit. Reddit gives you the best of the internet in one place. Django 2.0 url() to path() thanks! I still have urls.py files that are

Path is a new feature of Django 2.0. Explained here : https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0

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.

Is it better to use path() or url() in urls.py for django 2.0 , What is the difference between path and url in the urls.py in Django and now, 8 years later, I now use the documentation, but up until now, it's been pointless, As a by the by, whilst django documentation is better than most, there is much of it that's Django 2.0 introduces path as a replacement for URL. The path function is contained with the django.urls module within the Django project code base. path is used for routing URLs to the appropriate view functions within a Django application using the URL dispatcher. Example 1 from dccnsys. dccnsys is a conference registration system built with Django. The code is open source under the MIT license.

What is the difference between path and url in the urls.py in Django , In this chapter, you'll learn more about Django urls which are the entry point into a you learned how Django projects use the urls.py file to define url paths in two parts: a basic Equivalent path() method statements # urlpatterns = [ # path('​about/' Prior to Django 2.0, the only way to define urls paths was through regular  Django runs through each URL pattern, in order, and stops at the first one that matches the requested URL, matching against path_info. Once one of the URL patterns matches, Django imports and calls the given view, which is a Python function (or a class-based view ). The view gets passed the following arguments: An instance of HttpRequest.

Django Url paths and regular expressions: django.urls.path, django , To design URLs for an app, you create a Python module informally called a URLconf (URL configuration). See the internationalization documentation for more information. When switching from using path() to re_path() or vice versa, Versions: latest · stable · 3.1.x · 3.0.x · 2.2.x · 2.1.x · 2.0.x · 1.11.x  We leave out the `namespace` argument, because the namespace will be defined in the *users/urls.py* file. ### p. 440, *The Login Page* The *users/urls.py* file should look like this: """Defines url patterns for users.""" from django.urls import path: from django.contrib.auth.views import login: from . import views: app_name = 'users

URL dispatcher, It's recommended you use this default structure throughout the book so that your code matches the examples. We will get to these more advanced options a bit later in the book. The path() function statements are kept in a special file called urls.py . The re_path() function, replaced the url() function in Django 2.0. The view argument is a view function or the result of as_view () for class-based views. It can also be an django.urls.include (). The kwargs argument allows you to pass additional arguments to the view function or method. See Passing extra options to view functions for an example. See Naming URL patterns for why the name argument is useful.

Comments
  • If you are following a tutorial, I would use whichever style the tutorial uses, to prevent mistakes when switching between path() and url(). If you want or need to use regexes, then you must use re_path() or url(). Beyond that, I think it's really up to you which one you choose.
  • Thanks for the detailed info! re_path is what I'm looking for then.
  • A little misleading since your path() example allows non-four-digit numbers.
  • The /<int:year>/ signifies that the year should be in integer, i suggest you look through the official documentation.
  • @silvablaze As BrainCore stated, int is not equivalent to [0-9]{4}. Whether it is used for integers or not has no bearing on this relationship. Perhaps if you replaced [0-9]{4} with [0-9]+ your comparison might be less inaccurate, although you might still need to deal with the type of the end result (str vs int?).
  • Yes, I think as pointed out above to use REs you have to use the re_path() function instead.