2014-03-02 2 views
0

저는 Python에 대한 경험이 있지만 저는 장고와 웹 개발을 처음 접했습니다.초급 Django : URL 경로를 정의하는 데 문제가 있습니다.

두 개의 URL을 설정했지만 그 중 하나만 렌더링됩니다. 즉 URL 패턴 목록의 첫 번째 URL에 문제가 있습니다. 이제 막 시작 했으므로 기본적으로 사용자 등록 양식과 기본 "Hello, World"페이지를 표시하는 페이지가 있습니다.

URL이 localhost:8000/mysite이든 localhost:8000/registration이든 관계없이 현재 구성이 있고 개발 서버를 실행하면 등록 양식 페이지로 이동합니다. mysite/myapp/urls.py의 urlpatterns 목록에서 두 항목의 순서를 바꾸면 두 URL 모두 나를 "Hello, World"페이지로 이동시킵니다.

나는 내가 틀린 일을해야한다는 것을 알고있다. 그러나 나는 그것을 알아낼 수 없다. 감사!/urls.py은 다음과 같습니다

내 사이트/MyApp를 : 내 사이트/urls.py은 다음과 같습니다

from django.conf.urls import patterns, url 
from myapp import views 

urlpatterns = patterns('', 
    url(r'^$', views.registration, name='registration'), 
    url(r'^$', views.index, name='index'), 
) 

내 파일 :

from django.conf.urls import patterns, include, url 

from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^mysite/', include('myapp.urls')), 
    url(r'^registration/', include('myapp.urls')), 
    url(r'^admin/', include(admin.site.urls)), 
) 

MyApp를/전망. py은 다음과 같습니다.

from django.shortcuts import render 
from django.http import HttpResponseRedirect, HttpResponse 
from myapp.forms import UserRegistrationForm 

def index(request): 
    return HttpResponse("Hello, world. You're at the main page for MySite!") 

def registration(request): 
    if request.method == 'POST': 
     form = UserRegistrationForm(request.POST) 

     if form.is_valid(): 
      # stuff gets done with form    
      return HttpResponseRedirect('/registration/') 
    else: 
     form = UserRegistrationForm() 

    return render(request, 'myapp/registration_form.html', { 
     'form': form, 
    }) 

답변

1

같은 접두사가 포함 된 동일한 패턴의 패턴을 다른 urlconf에 넣을 필요는 없습니다. 즉, 둘 사이를 구별 할 수있는 방법이 없습니다. 브라우저에서 장고에게 "이 URL의 콘텐츠를 내게 제공하라"는 것을 알려주고 있기 때문에 장고는 제공하려는 각각의 다른보기에 대해 고유 한 URL을 가져야합니다.

내 사이트/urls.py :

url(r'', include('myapp.urls'), 

myapp.urls.py :

당신이 접두사없이 두 URL을 제공하려면

는 다음 중 하나는 접두사없이 전체 urlconf 포함

또는 더 단순한 응용 프로그램 별 urlconf를 전혀 포함하지 않고 mysite/urls.py에서 직접 두 가지 URL 패턴을 사용하십시오.

+0

이것이 내가 찾던 것입니다. 감사합니다! – wickstopher

0

두 표현식 모두에 사용 된 정규 표현식은 r'^$'과 같으므로보다 일반적인 URL로 변경해야합니다. url 라우팅은 url이 정규 표현식과 일치하는 텍스트를 식별하고 튜플에서 찾은 첫 번째 함수로 리디렉션하기 때문에 이런 일이 발생합니다.

나는 r'^$'를 수 집에 대한 mysite/urls.py의 URL을 추천하고, 등록을위한 하나 r'^registration/$'

urlpatterns = patterns('', url(r'^registration/$', views.registration, name='registration'), url(r'^$', views.index, name='index'), )

+0

이것은 작동하지 않습니다. 이 변경을하면 양쪽 경로가 이제 mysite/page (index() 함수)로 이동합니다. – wickstopher

+0

내 대답을 편집했으며 mysite/urls.py에서 다음 구성을 사용하려고 시도했습니다. – Leonardo

1

문제는 당신이 함께 등록 페이지에 액세스하려고하는 것입니다 수 색인 페이지에 사용한 것과 동일한 URL 패턴 (r '^ $'). 그래서 smt가 다른 등록 페이지에 액세스해야합니다. 예를 들어,

urlpatterns = patterns('registration', 
    url(r'^registeration/$', views.registration), 
    url(r'^$', views.index, name='index'), 
) 
+0

이것은 아래 답변 및 작동하지 않습니다. 이 솔루션에서는 registration() 함수를 호출하는 두 URL 대신 index() 함수를 호출합니다. – wickstopher

+0

'mysite/urls.py'에서 URL을 편집하셨습니까? – Leonardo

+0

나는 내가 따라 왔는지 확신하지 못한다. localhost : 8000/registration을 사용하여 등록 페이지 (views의 registration() 메소드)에 액세스하고 localhost : 8000/mysite를 사용하여 뷰의 "Hello, World"페이지 (index() 메소드)에 액세스합니다. 지금까지 해답을 제시하지 못했습니다. – wickstopher

관련 문제