I am using django-registrations-redux. In my template, I have the following:
html:
<li>Change Password</li>
and the urls.py is:
url(r'^accounts/', include('registration.backends.default.urls')),
if I go to the following
http://127.0.0.1:8000/accounts/
I get the list of all the links that works under accounts/ such as login, logout and register...etc
If i go to accounts/login it works really fine but if i go to /accounts/password/change in the case of the html provided above, the page redirects to an admin look and feel page witha Django Administration banner on the top of the page.
any help? am i missing anything?
edit:
urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^home/', "asset.views.home", name="home"),
url(r'^add_asset/', "asset.views.add_asset", name="add_asset"),
url(r'^update_asset/(?P<id>\d+)/$', "asset.views.update_asset", name="update_asset"),
url(r'^asset_detail/(?P<slug_asset_desc>[\w\-]+)/$', "asset.views.asset_detail", name='asset_detail'),
url(r'^search/$', "asset.views.search_asset", name="search"),
url(r'^accounts/', include('registration.backends.default.urls')),]
The full url for password changing is "password/change/" with slash at the end. Maybe in your settings you set APPEND_SLASH to false and it's can't find "password/change" url. Try to use pattern name in your html code:
<li>Change Password</li>
Related
I am using django built-in login system for my website. Whenever I create an account and try to login, it redirects to the page http://127.0.0.1:8000/accounts/profile/ and gives error page not found.
But when I manually remove the accounts/profile/ part from url, it logins into the website. How can I make my django system to directly redirect to http://127.0.0.1:8000 rather than the above mentioned URL.
Here is my urls.py file code:
urlpatterns = [
path('',include('feedback.urls')),
path('accounts/', include('django.contrib.auth.urls')),
path('admin/', admin.site.urls),
path('login/', auth_views.login, {'template_name': 'login.html'}, name='login'),
path('logout/', auth_views.logout, {'next_page': 'login'}, name='logout'),
path('signup/', core_views.signup, name='signup'),
]
feedback/urls.py:
urlpatterns = [
path('create_url/',views.create_url,name='create_url'),
path('submit_affective/',views.submit_affective,name='submit_affective'),
path('submit_cognitive/',views.submit_cognitive,name='submit_cognitive'),
path('thanks/',views.thanks,name='thanks'),
path('detail_affective/<int:id>',views.detail_affective,name='detail_affective'),
path('detail_cognitive/<int:id>',views.detail_cognitive,name='detail_cognitive'),
path('',views.index,name='index'),
]
The solution you are looking for is in settings.py.
By default after login django redirects the user to an accounts/profile page. If you want to redirect to a different place you need to edit the LOGIN_REDIRECT_URL. Doing that you can send the user to a different page
Here is the documentation for that setting
(app/urls.py)-> From django.contrib.auth.views import login
(app/urls.py)->path('login/' login ,{'template_name':'login.html/'}),
t go settings.py and write LOGIN_REDIRECT_URL='/'
make login.html in template folder
in login html make form
So I create an url in root/project/urls.py with this lines
from django.conf.urls import include
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
path('users/', include('app.urls'))
]
while in my root/app/urls.py
from django.urls import path
from .views import UserView, AuthenticationView
urlpatterns = [
path('register/', UserView.as_view()),
path('auth/', AuthenticationView.as_view()),
]
So it is expected to give me http://localhost:8000/users/register and http://localhost:8000/users/auth urls.
Meanwhile my request doesn't behave as expected.
apparently it returns me a space between the root path and include path. I check my root/project/settings.py file I don't find any weird settings. Does anybody know what is going on?
The space is just for displaying how the URL is built up, on the debug screen only.
I have experienced the same and at first I too thought Django somehow added the space. In the end it really is that there is no match between the URL's specified and the URL in your browser. Safari doesn't display the full url, so error can happen quickly...
Some additional info on urls in Django can be found here.
The error message in your screenshot states that the request URL is http://localhost:8000/users does not exist.
Here you redirects /users/ to app.urls:
path('users/', include('app.urls'))
But in app.urls, you never included a pattern for when the URL ends with only "/users/". Instead, "/users/register/" and "/users/auth/" are both specified.
urlpatterns = [
path('register/', UserView.as_view()),
path('auth/', AuthenticationView.as_view()),
]
So http://localhost:8000/users/register and http://localhost:8000/users/auth should be valid URLs, but http://localhost:8000/users is not.
You can add another URL pattern for when the URL ends at "/users/":
urlpatterns = [
path('', AuthenticationView.as_view()), # maybe the same as /auth/ ?
path('register/', UserView.as_view()),
path('auth/', AuthenticationView.as_view()),
]
In conclusion, Django's actually not wrong about that page does not exist (404), it's because you hadn't match http://localhost:8000/users in any of the urlpatterns.
Have you tried to use regular expressions?
path(r'^admin/', admin.site.urls)
Otherwise in the Django 2 version the urls schema has been changed, I use url function instead the path function, that can be a possible fix for your problem
I'm stuck with a Django project, I tried to add another app called login to make a login page but for some reason the page just redirects to the homepage except for the admin page
For example: 127.0.0.1:8000 will go to the homepage but 127.0.0.1:8000/login will also display the homepage even though I linked another template to it.
Here is my code:
main urls.py
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('portal.urls')),
url(r'^login/', include('login.urls')),
]
login urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^login/', views.index, name="login"),
]
login views.py
from django.shortcuts import render
def index(request):
return render(request, 'login/login.html')
portal urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^', views.index, name="portal"),
]
I see 2 problems here:
As #DanielRoseman mentioned above, the regular expression ^ matches anything, so you should change it to ^$.
When you use an include, the rest of the path after what the include matched is passed to the included pattern. You’ll want to use ^$ in your login urls.py too.
You don't terminate the portal index URL, so it matches everything. It should be:
url(r'^$', views.index, name="portal"),
In addition, if the regex is login/$ but you enter http ://server/login, then it won't match wheras http://server/login/ will.
You could try changing the regex to login/*$, which will match any number (even zero) / on the end of the url.
So http: //server/login, http: //server/login/, http: //server/login//// would all match.
Or if you want to be specific, login/{0,1}$ might work (though that regex syntax is from memory!)
I followed the instructions in the tutorial
I made one change for debugging, here are the files:
mysite1\urls.py:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^abc/', include('polls.urls')),
url(r'^polls/', admin.site.urls),
url(r'^admin/', admin.site.urls),
]
File: mysite1\polls\urls.py
from django.conf.urls import url
from .import views
urlpatterns = [
url(r'^&', views.index, name='index'),
]
Now if I go to the site http://127.0.0.1:8000/polls/ then it shows the login page same as going to the site http://127.0.0.1:8000/admin/.
However, if I go to the site http://127.0.0.1:8000/abc/ it gives me the following:
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/abc
Using the URLconf defined in mysite1.urls, Django tried these URL patterns, in this order:
^abc/
^polls/
^admin/
The current URL, abc, didn't match any of these.
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.
Can someone guide me what I am doing wrong?
In mysite1\polls\urls.py It should be
url(r'^$', views.index, name='index'),
Notice that your code had an & instead of $. $ indicates a end-of-string match character.
I had a few issues with this, maybe it'll help someone. My VS code was running python 2.7 so the first line on page urls.py in the web project folder (not the polls folder) I had to change to "django.conf.urls import include, url" from "from "django.urls import include, path". I had to include .conf. and urls, path was not working and it was not working without "conf".
Another issue I had on this same page is I had to correct it to "urlpatterns = [url('', include('hello.urls'))..." from "urlpatterns = [path('', include("hello.urls"))". Path was not working so I got this to work.
The third thing is, Notice that there is a '' in the code. It should be blank otherwise when you go to url http://127.0.0.1:8000/ it doesn't redirect to views.py in the polls folder.
I hope this helps someone. Thanks
I started to follow this tutorial and it teaches how to load the index.html, but now I need to develop a login.html page, but it seems not be working properly.
urls.py
urlpatterns = patterns('',
url(r'^$', 'provisioning.views.home', name='home'), <- it works!
url(r'^$', 'provisioning.views.login', name='login'), <- doesn't work..
url(r'^admin/', include(admin.site.urls)),
)
views.py
def login(request):
return render(request, 'login.html')
How to setup the pages to be loaded by django ?
Is there another and better way in doing this ?
You have the same URLs for both home and login. The regex pattern r'^$' specifies that nothing comes after your local host. Because they are the same and Django checks URLs sequentially, only the first url and view is called. Try adding a different url for login.
url(r'^login/$', 'provisioning.views.login', name='login')