[英]Can't find page in django
我目前正在學習Django,並且正在嘗試添加表單來注冊用戶。
現在我的問題開始得很早,因為每次嘗試訪問注冊頁面時都會收到404。
我的3個文件如下:
views.py :基本上是一個問候世界
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello World")
def registration(request):
return HttpResponse("Registration page")
urls.py (在我的項目中):
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
(r'^$', include('myapp.urls')), # index with login/registration
(r'^grappelli/', include('grappelli.urls')), # grappelli URLS
(r'^admin/', include(admin.site.urls)), # admin site
)
最后是urls.py (在我的應用中):
from django.conf.urls import patterns, url
from myapp import views
urlpatterns = patterns('',
url(r'^$',views.index, name='index'),
url(r'^registration/$',views.registration, name='registration'),
)
當我轉到常規索引(localhost:8000)時,它將顯示我在views.py文件中編寫的世界。 但是,當我嘗試進入注冊頁面時,它只會返回404(localhost:8000 / registration)。
現在,正如我說的那樣,我仍在學習整個過程,但是我不明白為什么它無法正常工作。 據我了解,項目文件中的r'^$'
指向localhost:8000,應用程序文件中的同一個正則表達式告訴它在此位置加載索引頁。 現在,由於程序仍在localhost:8000中,因此r'^ registration /'應該在localhost:8000 / registration中加載另一個頁面,對嗎?
如果您能向我解釋為什么這行不通以及我的想法在哪里出錯,那將是非常不錯的。
這是我得到的錯誤:
當我拿
(r'^randomstringhere/', include('myapp.urls')), # index with login/registration
代替
(r'^$', include('myapp.urls')), # index with login/registration
我可以通過localhost:8000 / randomstringhere / registration進入注冊頁面。 但是Site是為了讓您可以選擇登錄或注冊localhost:8000(或將來的域名www.randomdomainhere.com),以及在localhost:8000 / login,localhost:8000 / registration(www .randomdomainhere.com / registration等)
在每個網址的末尾,您應添加一個$符號,
url(r'^registration/$',views.registration, name='registration'),
您在網址末尾缺少$符號。
它應該是:
url(r'^registration/$',views.registration, name='registration'),
django url中的$符號表示從正則表達式借來end-of-string match character
。 因此,應在應用程序網址的網址末尾添加$。
url(r'^registration/$',views.registration, name='registration'),
但是,我們可以使用不帶$(字符串末尾匹配字符)的正則表達式編寫url,但必須添加一個末尾的斜杠(/)。 對於不帶$的網址,您必須在瀏覽器中打開該網址以匹配正則表達式的同時輸入結尾斜杠。
您項目的urls.py中的應用程序網址為
url(r'^ grappelli /',include('grappelli.urls')),#grappelli URLS
因此,要訪問注冊頁面,您需要瀏覽
本地主機:8000 /格拉佩利/注冊/
即,將應用程序網址中的路徑附加到應用程序的項目網址中的路徑。
您需要從第一個網址中刪除$,如下所示
urls.py(在我的項目中):
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
(r'^', include('myapp.urls')), # index with login/registration
(r'^grappelli/', include('grappelli.urls')), # grappelli URLS
(r'^admin/', include(admin.site.urls)), # admin site
)
網址以^開頭,以$結尾。 因此,如果遇到$,則django會了解到該URL已經結束,並且前面沒有其他內容。 因此,在您的情況下,它將不再尋找“注冊”。 或者您的帶有“注冊”的網址與所有指定的網址都不匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.