application not recognized as URL namespace

283 views
Skip to first unread message

Axel Rau

unread,
Dec 14, 2015, 7:37:56 AM12/14/15
to Django users
In my root url, I have:

url(r'^authentication/', include('authentication.urls')),

in authentication/urls.py, I have no app_name declared.

In a module in authentication, I have

from django.core.urlresolvers import reverse

from django.apps import apps
print('authentication installed? ' + str(apps.is_installed('authentication')))

reverse('authentication:password_change',urlconf='authentication.urls')

and receive
django.core.urlresolvers.NoReverseMatch: 'authentication' is not a registered namespace
while the above debug print gives
authentication installed? True

What am I doing wrong here?

Please advice,
Axel

PGP-Key:29E99DD6 ☀ +49 160 9945 7889 ☀ computing @ chaos claudius

knbk

unread,
Dec 14, 2015, 8:06:16 AM12/14/15
to Django users
Hi Axel,

An installed application and a registered URL namespace are two distinct concepts. A URL namespace can only be defined by setting the app_name attribute in your urlconf. In this case, you haven't set a URL namespace for your authentication app, so your urls are not namespaced.

Also, the urlconf parameter to reverse() should point to the root urlconf, not to the urlconf in which your current url is defined. Since it defaults to the root urlconf defined in your project, it's easiest to omit it in most cases. If you don't, and use 'authentication.urls' as your root urlconf, the generated url will miss the 'authentication/' part of your url. 

To reverse the password_change url, simply use this:

reverse('password_change')

Marten

Axel Rau

unread,
Dec 14, 2015, 9:22:14 AM12/14/15
to Django users
Thanks for taking the time,


Am 14.12.2015 um 14:06 schrieb knbk <marte...@gmail.com>:

Hi Axel,

An installed application and a registered URL namespace are two distinct concepts. A URL namespace can only be defined by setting the app_name attribute in your urlconf. In this case, you haven’t set a URL namespace for your authentication app, so your urls are not namespaced.
OK. (I misunderstood the 1.9 docu as this would be required only with instance namespaces).


Also, the urlconf parameter to reverse() should point to the root urlconf, not to the urlconf in which your current url is defined. Since it defaults to the root urlconf defined in your project, it's easiest to omit it in most cases. If you don’t, and use 'authentication.urls' as your root urlconf, the generated url will miss the 'authentication/' part of your url.
I understand.

 

To reverse the password_change url, simply use this:

reverse(‚password_change')
Making both changes gives:
django.core.urlresolvers.NoReverseMatch: Reverse for 'password_change' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

I then tried to reference the views directly instead of strings:

from . import views
reverse(views.password_change),

with views.py containing:

    class PasswordChangeView(LoginRequiredMixin, AuthDecoratorsMixin, WithCurrentSiteMixin, FormView):
        ...
        
    password_change = PasswordChangeView.as_view()

and got;

django.core.urlresolvers.NoReverseMatch: Reverse for 'authentication.views.PasswordChangeView' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

Axel



Marten


On Monday, December 14, 2015 at 1:37:56 PM UTC+1, Axel...@Chaos1.DE wrote:
In my root url, I have:

    url(r'^authentication/', include('authentication.urls')),

in authentication/urls.py, I have no app_name declared.

In a module in authentication, I have

        from django.core.urlresolvers import reverse

        from django.apps import apps
        print('authentication installed? ' + str(apps.is_installed('authentication')))

        reverse('authentication:password_change',urlconf='authentication.urls')
 
and receive
        django.core.urlresolvers.NoReverseMatch: 'authentication' is not a registered namespace
while the above debug print gives
        authentication installed? True

What am I doing wrong here?

Please advice,
Axel        

PGP-Key:29E99DD6  ☀ +49 160 9945 7889  ☀ computing @ chaos claudius


--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/fc585533-0cb4-4419-8944-b38cbf4b472c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

---

knbk

unread,
Dec 14, 2015, 9:29:22 AM12/14/15
to Django users
Could you show your full root urls.py and authentication/urls.py?

Axel Rau

unread,
Dec 14, 2015, 9:53:24 AM12/14/15
to django...@googlegroups.com
Am 14.12.2015 um 15:29 schrieb knbk <marte...@gmail.com>:

Could you show your full root urls.py and authentication/urls.py?

urls.py:

from django.conf.urls import include, url
from django.views.generic import TemplateView

# Uncomment the next two lines to enable the admin:
from django.contrib import admin

urlpatterns = (
    url(r'^$', TemplateView.as_view(template_name='base.html')),
    url(r'^authentication/', include('authentication.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

if settings.DEBUG:
    import debug_toolbar
    urlpatterns += (url(r'^__debug__/', include(debug_toolbar.urls)),)

authentication/urls.py:

from django.conf.urls import url
from . import views

app_name = 'authentication'

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^login/$', views.login, name='login'),
    url(r'^loggedin/$', views.loggedin, name='loggedin'),
    url(r'^logout/$', views.logout, name='logout'),
    url(r'^password/$', views.password, name='password'),
    url(r'^password_change/$', views.password_change, name='password_change'),
    url(r'^password_change/done/$', views.password_change_done, name='password_change_done'),
    url(r'^password_reset/$', views.password_reset, name='password_reset'),
    url(r'^password_reset/done/$', views.password_reset_done, name='password_reset_done'),
    url(r'^reset/done/$', views.password_reset_complete, name='password_reset_complete'),
    url(r'^reset/(?P<uidb64>[0-9A-Za-z]{1,13})-(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
        views.password_reset_confirm,
        name='password_reset_confirm'),
    url(r'^profile/$', views.profile, name='profile')
]

Axel


For more options, visit https://groups.google.com/d/optout.

knbk

unread,
Dec 14, 2015, 10:03:33 AM12/14/15
to Django users
authentication/urls.py:
 
from django.conf.urls import url
from . import views
 
app_name = 'authentication'

I thought you didn't have an app_name, but you do have one. In that case, the only problem was that you passed the wrong urlconf to reverse(). You should be able to reverse the url with:

reverse('authentication:password_change')


Axel Rau

unread,
Dec 14, 2015, 10:33:50 AM12/14/15
to Django users
Am 14.12.2015 um 16:03 schrieb knbk <marte...@gmail.com>:

authentication/urls.py:
 
from django.conf.urls import url
from . import views
 
app_name = 'authentication'

I thought you didn’t have an app_name, but you do have one.
I changed this after your advice.

In that case, the only problem was that you passed the wrong urlconf to reverse(). You should be able to reverse the url with:

reverse('authentication:password_change')

I did not try this combination, but it works!  Thanks!

One last question:

Changing this to an instance namespace would just require in urls:

    url(r'^auth/', include('authentication.urls', namespace='auth')),

and where I reverse:

        reverse(’auth:password_change’)

right?

But this again gives:

django.core.urlresolvers.NoReverseMatch: 'auth' is not a registered namespace


For more options, visit https://groups.google.com/d/optout.

Axel Rau

unread,
Dec 14, 2015, 10:47:37 AM12/14/15
to django...@googlegroups.com
I see my error: ’auth’ is already an appname (django.contrib.auth).
Using ’accnt’ works perfectly!

Thanks, again, Axel


For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages