2014-05-17 4 views
1

장고에서 개인 블로그를 개발하는 동안 내 코드에서 하나의 불쾌한 버그가 발생했습니다. 기본적으로 몇 가지 규칙을 추가하여 특정보기에 액세스 할 수 있도록 urls.py 파일을 변경했습니다.Django urls.py 버그 - 일부 패턴이 작동하지 않습니다.

urls.py

from django.conf.urls import include, url 
from django.contrib import admin 

from blog import views 


urlpatterns = [ 
    # Examples: 
    # url(r'^$', 'blogas.views.home', name='home'), 
    # url(r'^blog/', include('blog.urls')), 

    url(r'^admin/', include(admin.site.urls)), 
    url(r'^$', views.index, name='index'), 
    url(r'^(?P<slug>\w+)', views.view_post, name='view_blog_post'), 
    url(r'^about/$', views.about, name='about'), 
    url(r'^posts/$', views.posts, name='posts'), 

] 

모든 난에 대해 또는/게시물 액세스 http://127.0.0.1:8000/을 시도하는 경우를 제외하고 작동하는 것 같군, 장고는 404 오류를 발생합니다. 이것의 이유는 무엇입니까? 두 규칙을 모두 정의했지만 시스템이 패턴을 인식하지 못하는 것 같습니다. 어쩌면 잘못 입력 한 것일 수도 있습니다. 어쩌면 내가 URL 형식화에 대해 아무것도 모른다는 것입니다 (아마도이 ​​자료를 처음 작성한 것일 수 있습니다).

버그 :

답변

2

url(r'^(?P<slug>\w+)', views.view_post, name='view_blog_post'),의 위치를 ​​변경해야합니다.

urlpatterns = [ 
     # Examples: 
     # url(r'^$', 'blogas.views.home', name='home'), 
     # url(r'^blog/', include('blog.urls')), 

     url(r'^admin/', include(admin.site.urls)), 
     url(r'^$', views.index, name='index'), 
     url(r'^about/$', views.about, name='about'), 
     url(r'^posts/$', views.posts, name='posts'), 
     url(r'^(?P<slug>\w+)', views.view_post, name='view_blog_post'), 
     ] 

urlpatterns는 목록이며 URL의 순서가 중요합니다.

+0

솔루션을 제공해 주셔서 감사합니다. 아직 페이지는 슬래시로만 연결할 수 있습니다. 하나도 없으면 여전히 나에게 404가 표시됩니다.이 문제를 어떻게 해결할 수 있습니까? –

+1

이 URL을 사용해보십시오. (\ w +)/$ ', views.view_post, name ='view_blog_post ')' –

+0

왜 그런지 모르겠지만 작동합니다! 아마 약간의 설명? :디 –

5

URL입니다-패턴이 위에서 아래로 처리를 찾는 모든 사람에게 초보자 프로그래머에서 큰 감사를드립니다. 세 번째 패턴 ^(?P<slug>\w+)은 모든 것을 소비하므로 aboutposts에 도달하지 않습니다.

예 : 장고는 URL about/에 대한보기를 찾고 싶어합니다. ^admin/^$ 패턴이 일치하지 않습니다. 문자 또는 숫자 (\w에 포함 된 문자 집합)와 about 시작이

>>> import re 
>>> re.search('^(?P<slug>\w+)', 'about/') 
<_sre.SRE_Match object at 0x10b5b7be8> 

그래서 장고 일치, callBs views.view_post을 발견하고 요청을 완료하기 때문에 그러나, ^(?P<slug>\w+) 않습니다. 즉,보다 구체적인 규칙이 우선되어야합니다. 더 나은 : 모호성을 피하십시오.

+0

고마워. 아직도, 나는 그들이이 문제를 해결하지 못한 이유를 알고 싶다. (이 현상의 역학) 나는이 문제를 쉽게 해결할 수있다. –

관련 문제