2014-03-02 42 views
0

我對Python有一些經驗,但是我對Django和一般的web開發很陌生。初學者Django:定義URL路徑時遇到的問題

我有一個問題,我已經設置了兩個URL,但只有其中一個會被渲染:即URL模式列表中的第一個。 我剛開始,所以基本上,我現在所擁有的只是一個顯示用戶註冊表單的頁面,以及一個基本的「Hello,World」頁面。

根據當前配置並運行開發服務器,我是否轉到URL localhost:8000/mysitelocalhost:8000/registration我將被帶到註冊表單頁面。如果我在mysite/myapp/urls.py中的urlpatterns列表中顛倒了兩者的順序,那麼這兩個URL都會將我帶到「Hello,World」頁面。

我知道我必須做錯事,但我似乎無法弄清楚。謝謝!

的mysite/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'), 
) 

我的文件的mysite/urls.py看起來是這樣的:

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中是沒有意義的。這意味着無法區分它們。請記住,所發生的一切就是您的瀏覽器正在告訴Django「向我提供這個URL的內容」,因此Django需要爲您想要提供的每個不同視圖提供一個獨特的URL。

如果你想同時投放的網址沒有前綴,那麼無論有沒有前綴整個URL配置:

的mysite/urls.py:

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

myapp.urls.py:

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

或者甚至更簡單,根本不用費神去包含一個特定於應用程序的urlconf,直接在mysite/urls.py中使用這兩個url模式。

+0

這就是我正在尋找的,謝謝! – wickstopher

0

您使用的正則表達式與r'^$'相同,您必須將url更改爲更一般的東西。發生這種情況是因爲URL路由獲取url標識與正則表達式匹配的文本並重定向到它在元組中找到的第一個函數。

我建議爲mysite/urls.py的URL家是r'^$',以及一個用於登記要r'^registration/$'

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

+0

這似乎並不奏效。當我做這個改變現在兩個路徑只是帶我mysite /頁(索引()函數) – wickstopher

+0

我編輯我的答案,嘗試使用'mysite/urls.py', – Leonardo

1

的問題是,你正在試圖與進入註冊頁面相同的網址格式(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'上的網址嗎? – Leonardo

+0

我不確定我是否遵守。我想使用localhost:8000/registration來訪問註冊頁面(視圖中的registration()方法)和localhost:8000/mysite來訪問「Hello,World」頁面(視圖中的index()方法)。迄今爲止的答案都沒有提供這種解決方案。 – wickstopher