Simanto Bagchi
Simanto Bagchi

Reputation: 91

Issues with path() in urls.py in django 2.0.5

I am trying to do the following thing in urls.py but Django 2.0.5 doesn't seem to support url(). Instead of it, I used path() but still, its throwing invalid syntax error. Can someone give a clearer picture of path() as it seems to be not supporting regex.

Providing the code here:

from django.contrib import admin
from django.urls import path

from .views import home_page

urlpatterns = [
    path('$', home_page)
    path('admin/', admin.site.urls),
]

Upvotes: 1

Views: 3614

Answers (4)

Devin B.
Devin B.

Reputation: 453

If you prefer to use url instead of path, that will work just fine. You just have to import from django.conf.urls instead. So your import statement should look like this:

from django.conf.urls import url

Django says on their documentation page that this feature will likely be deprecated in future versions to re-path, however, url still works fine for me, and I'm running Django 2.0.7... so, I imagine it would work with yours as well. I guess because of this, with Django version 2 and above, it nows decides when it creates the boilerplate project that instead of importing urls from django.conf.urls, it imports path from django.urls. (Note: PATH doesn't allow for regex)

What I typically do, is create an app specific urls.py. In that urls.py I'll import url from django.conf.urls and have my specific app level urls there:

from django.conf.urls import url
from app_name import views # have to import views

urlpatterns = [
    url(r'^$', views.index),
    url(r'^users$',views.users),
]

Then in the project level urls.py I'll add the include module as so I can link it to my app specific urls.py file:

from django.conf.urls import url, include
from django.contrib import admin
from app_name import views

urlpatterns = [
    url(r'^',include('app_name.urls')),
    url(r'^admin/', admin.site.urls),
]

(Note: If you have a separate folder in between such that the folder structure looks something like mainproject>apps>app_name>(settings.py, views.py, admin.py etc...) you will have to create an __init__.py file in the apps folder as so Django can recognize the module.

Upvotes: 1

hygull
hygull

Reputation: 8740

Django2 has 2 functions for URLconfs, path(), re_path().

You can use regex paths (regular expression based paths) with re_path(), so remove $ and place , between two consecutive paths.

Note: Let suppose your app name is my_django_app created by python manage.py startapp my_django_app command.

I created a new Django app named my_django_app and tried, it works fine. I have the following code in my urls.py file.

"""my_django_proj URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.0/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from my_django_app.views import home_page

urlpatterns = [
    path('', home_page),
    path('admin/', admin.site.urls),
]

References: https://docs.djangoproject.com/en/2.0/topics/http/urls/

django 2.0 - including urls file from an app to the root urls file

Thanks.

Upvotes: 1

codeandfire
codeandfire

Reputation: 465

urlpatterns = [
    path('', home_page),
    path('admin/', admin.site.urls)
]

As stated in the above answers, the $ is unnecessary while using path(). You are getting a syntax error due to the comma after admin.site.urls) which should be removed.

Upvotes: 0

Waket Zheng
Waket Zheng

Reputation: 6371

You miss a ,, and $ is unnecessary

from django.contrib import admin
from django.urls import path

from .views import home_page

urlpatterns = [
    path('', home_page),
    path('admin/', admin.site.urls),
]

Upvotes: 1

Related Questions