lili
lili

Reputation: 61

Cannot find url

I got an error that,

Page not found (404)
Request Method: GET
Request URL:    `http://localhost:8000/accounts/registration/accounts/registration/accounts/registration/accounts/profile.html`   .

I think routes are wrong But I cannot understand how to fix the routes.

In accounts app,I wrote in urls.py

from django.conf.urls import url
from . import views
from django.contrib.auth.views import login, logout

urlpatterns = [
    url(r'^login/$', login,
        {'template_name': 'registration/accounts/login.html'},
        name='login'),
    url(r'^logout/$', logout, name='logout'),
    url(r'^regist/$', views.regist,name='regist' ),
    url(r'^regist_save/$', views.regist_save, name='regist_save'),
    url(r'^registration/accounts/registration/accounts/profile.html$', views.regist_save, name='regist_save'),
]

in views.py

@require_POST
def regist_save(request):
    form = RegisterForm(request.POST)
    if form.is_valid():
        user = form.save()
        login(request, user)
        context = {
            'user': request.user,
        }
        return redirect('registration/accounts/profile.html', context)


    context = {
        'form': form,
    }
    return render(request, 'registration/accounts/regist.html', context)

in accounts(child app)/templates/registration/accounts/profile.html directory,

{% extends "registration/accounts/base.html" %}
{% block content %}
user.username: {{ user.username }}<hr>
user.is_staff: {{ user.is_staff }}<hr>
user.is_active: {{ user.is_active }}<hr>
user.last_login: {{ user.last_login }}<hr>
user.date_joined: {{ user.date_joined }}
{% endblock %}

Upvotes: 0

Views: 256

Answers (1)

Daniel Roseman
Daniel Roseman

Reputation: 599450

You have some serious misunderstandings here.

You can't have a template without a view. You have written a template for the profile, but you haven't written a view. You need the view that loads the profile data and then renders the profile.html template.

Secondly, your URL has nothing to do with the template location; as you have done in regist_save, you should define a sensible URL pointing to that view - for the profile, you probably want something like r'^profile/$'.

So, the fifth entry in your urls.py should be:

url(r'^profile/$', views.profile, name='profile'),

and you need a corresponding function named profile in views.py.

Finally, when you redirect you need to use an actual URL entry - again, it has nothing to do with templates. So in your regist_save view, you should do:

return redirect('profile')

Upvotes: 1

Related Questions