What's the meaning of using patterns in Django URLs? - django

In my Django project, I find the project urls.py resolve URLs directly
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^test/', include('test.urls')),
]
but I find the app urls.py solution always use
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^new$', views.new, name='new'),
)
when I try to change app's urls.py to
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^new$', views.new, name='new'),
]
or
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
)
urlpatterns += patterns('',
url(r'^new$', views.new, name='new'),
)
also works, so I want to know the meaning of using patterns and which one is better.

Patterns is deprecated since 1.8 (and removed in 1.10)
from the 1.8 docs:
Deprecated since version 1.8:
urlpatterns should be a plain list of django.conf.urls.url() instances instead.

Related

Wildcard url in Django using re_path

As per Django documentation ,below url pattern will work for
http://127.0.0.1:8000/index . But I want also to make it work for
http://127.0.0.1:8000/api/index/
http://127.0.0.1:8000/api/json/index/
from django.urls import include, re_path
urlpatterns = [
re_path(r'^index/$', views.index, name='index'),
...
]
How we can achieve it using re_path
you can add multiple entries of re_path with different urls endpoints for same views.index like this .
urlpatterns = [
re_path(r'^index/$', views.index, name='index'),
re_path(r'^api/json/index/$', views.index, name='index'),
re_path(r'^api/index/$', views.index, name='index'),
...
]

why 404 in django url?

I made url for signUp page.
but it returns 404 error.
all of the other urls work well.
I don't know the reason.
main urls
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('mobileWeb.urls')),
path('api/', include('api.urls')),
]
Application urls
urlpatterns = [
path('', views.index, name='index'),
path('index', views.index, name='index'),
path('addComment', views.addComment, name='addComment'),
# users
path('signUp', views.signUp, name='signUp'),
path('accounts/', include('allauth.urls')),
path('martDetail/<int:martId>', views.martDetail, name='martDetail'),
path('trade/<int:itemId>', views.trade, name='trade'),
path('registerMart', views.registerMart, name='registerMart'),
path('registerItem', views.registerItem, name='registerName'),
path('delete', views.delete, name='delete'),
path('deleteMart', views.deleteMart, name='deleteMart'),
path('deleteItem', views.deleteItem, name='deleteItem'),
path('purchaseItem', views.purchaseItem, name='purchaseItem'),
path('selectItem', views.selectItem, name='selectItem'),
path('addStatistics', views.addStatistics, name='addStatistics'),
path('viewStatistics', views.viewStatistics, name='viewStatistics'),
path('imtPosRegister', views.imtPosRegister, name='imtPosRegister'),
path('imtPosRegisterTest', views.imtPosRegisterTest, name='imtPosRegisterTest'),
path('imtPosSaleInfoTest', views.imtPosSaleInfoTest, name='imtPosSaleInfoTest'),
path('imtPosSaleConfirmTest', views.imtPosSaleConfirmTest, name='imtPosSaleConfirmTest'),
path('fsOe9ms1b', views.fsOe9ms1b, name='fsOe9ms1b'),
path('fsOe9ms1b_ma', views.fsOe9ms1b_ma, name='fsOe9ms1b_ma'),
path('ssOe9ms1b', views.ssOe9ms1b, name='ssOe9ms1b'),
path('ssOe9ms1b_ma', views.ssOe9ms1b_ma, name='ssOe9ms1b_ma'),
path('tsOe9ms1b', views.tsOe9ms1b, name='tsOe9ms1b'),
path('tsOe9ms1b_ma', views.tsOe9ms1b_ma, name='tsOe9ms1b_ma'),
path('writeChatting', views.writeChatting, name='writeChatting'),
path('imageUploadChatting', views.imageUploadChatting, name='imageUploadChatting')
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
404 in web browser
404 in console
The url path matching is case-sensitive. In your paths you wrote:
path('signUp', views.signUp, name='signUp'),
with uppercase U in signUp. I would however advise to use only lowercase, and rewrite this to:
path('signup/', views.signUp, name='signUp'),
The same with other paths in your urls.py.
Try visiting http:\127.0.0.1:8000\signUp

url conflict in Django

I get the same page regardless of what url I use. I get the home.html page for all the ones I have listed. Any suggestions would be valuable. Thanks!
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^signup/', include('log.urls')),
url(r'^login/', include('log.urls')),
url(r'^logout/', include('log.urls')),
url(r'^', include('log.urls')),
]
and from
from django.conf.urls import url
from . import views
# We are adding a URL called /home
urlpatterns = [
url(r'^signup/', views.signup, name='signup'),
url(r'^login/', views.login, name='login'),
url(r'^logout/', views.logout, name = 'logout'),
url(r'^', views.home, name='home'),
]
Your pattern is wrong, for everything you are including log.urls. It should be
project urls.py
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('log.urls')),
]
and then,
log urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^signup/$', views.signup, name='signup'),
url(r'^login/$', views.login, name='login'),
url(r'^logout/$', views.logout, name = 'logout'),
url(r'^$', views.home, name='home'),
]

How to set URL include to answer root level urls in django

I have these URL files:
project/url:
urlpatterns = [
url(r'^$', include(public)), <--- URL IN ERROR!!!!
url(r'^member/', include(mviews)),
url(r'^admin/', admin.site.urls),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
public/url:
urlpatterns = [
url(r'^$', views.index),
url(r'^login/', views.login)
]
mviews/url:
urlpatterns = [
url(r'^$', views.index),
url(r'^api/', include(router.urls)),
]
in the first URL file, the first URL where it says include(public) is erroring out. How do I set it so public is the "home" url group? Thanks.
I think here you have typo, your the name of file is wrong(url.py), It should be urls.py
And if above line holds then you can achieve grouping urls from public module by following
url(r'^home/', include('public.urls')),
url(r'^member/', include(mviews)),
url(r'^admin/', admin.site.urls),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))

Django only matches urls with an app prefix/identifier

I'm having a problem with django's URL system. I'm using Django 3. I have the following in my project's 'urls.py'
urlpatterns = patterns('',
url(r'^$', include('siteadmin.urls')),
)
and this in the 'urls.py' of a django app in the project, called 'siteadmin':
urlpatterns = patterns('',
url(r'^$', views.home, name='home'),
url(r'^register/$', views.register, name='register'),
url(r'^login/$', views.user_login, name='login'),
#...trimmed
)
With this setup, the following happens:
http://localhost/ => works perfectly, renders the 'home' view
http://localhost/register/ => breaks. (gives 404 and django's standard "The current URL, register, didn't match any of these.")
However, when I change the project's 'urls.py' to include the following:
urlpatterns = patterns('',
url(r'^app/', include('siteadmin.urls')),
)
And include /app/ in 1. and 2., both urls work perfectly. That is to say:
localhost/app/ => works perfectly
localhost/app/register => works perfectly.
What am I missing? Why does #2 break in the first case, but not the second?
Remove the dollar sign from the regex in the project urls.py:
urlpatterns = patterns('',
url(r'^', include('siteadmin.urls')),
)