2016-03-28 2 views
0

Я делаю эту программу django, где у меня есть страница входа, страница регистрации и после входа пользователя в систему у меня есть кнопка «создать рецепт». Моя проблема в том, что она не работает.Как создать url в django

Это urls.py:

from django.conf.urls import patterns, include, url 
from createprescription.views import * 
from . import views 

urlpatterns = patterns('', 
    url(r'^$', 'django.contrib.auth.views.login'), 
    url(r'^logout/$', logout_page), 
    url(r'^accounts/login/$', 'django.contrib.auth.views.login'), # If user is not login it will redirect to login page 
    url(r'^register/$', register), 
    url(r'^register/success/$', register_success), 
    url(r'^home/$', home), 
    url(r'^$', views.createprescription, name='createprescription'), 
    ) 

Это из views.py:

from createprescription.forms import * 
from django.contrib.auth.decorators import login_required 
from django.contrib.auth import logout 
from django.views.decorators.csrf import csrf_protect 
from django.shortcuts import render_to_response 
from django.http import HttpResponseRedirect 
from django.template import RequestContext 


@csrf_protect 
def register(request): 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      user = User.objects.create_user(
      username=form.cleaned_data['username'], 
      password=form.cleaned_data['password1'], 
      email=form.cleaned_data['email'] 
      ) 
      return HttpResponseRedirect('/register/success/') 
    else: 
    form = RegistrationForm() 
    variables = RequestContext(request, { 
    'form': form 
    }) 

    return render_to_response(
    'registration/register.html', 
    variables, 
    ) 

def register_success(request): 
    return render_to_response(
    'registration/success.html', 
    ) 

def logout_page(request): 
    logout(request) 
    return HttpResponseRedirect('/') 

@login_required 
def home(request): 
    return render_to_response(
    'home.html', 
    { 'user': request.user } 
    ) 

def createprescription(request): 
    return render(request, 'createprescription/createprescription.html', {})  

И это ошибка:

Using the URLconf defined in cwbis.urls, Django tried these URL patterns, in this order: 

    ^admin/ 
    ^$ 
    ^logout/$ 
    ^accounts/login/$ 
    ^register/$ 
    ^register/success/$ 
    ^home/$ 
    ^$ [name='createprescription'] 

The current URL, createprescription, didn't match any of these. 
+0

Что не работает? также заметил, что у вас есть повторное регулярное выражение для двух ссылок, только первый будет работать –

+0

, каков URL, который вы пытаетесь посетить? – v1k45

+0

Ошибка сообщает вам, что у вас нет URL-адреса, который соответствует «/ createprescription». –

ответ

0

Вы пытаетесь заставить логин своей страницы, но это не th способ его реализации. Эти два URL-адреса являются противоречивыми, и система будет использовать только первый:

url(r'^$', 'django.contrib.auth.views.login'), 
url(r'^$', views.createprescription, name='createprescription'), 

Чтобы решить эту ошибку, вы должны удалить строку

url(r'^$', 'django.contrib.auth.views.login'), 

от вашего urls.py.

Для того, чтобы позволить только зарегистрированным пользователям, чтобы увидеть страницу рецепта, добавьте следующие строки в views.py:

from django.contrib.auth.decorators import login_required 
... 
@login_required 
def createprescription(request): 
    ... 
+0

не работает –

+0

если я удалю первый URL-адрес, я не могу войти –

Смежные вопросы