2016-10-11 4 views
1

내 애플리케이션에서 404 오류 페이지를 맞춤 설정하려고합니다. 가능한 많은 솔루션을 검색 한 후 404.html 템플릿을 만들고 HTTP 오류 404를 처리하고 urls.py를 편집해야하는 메소드를 추가했습니다.맞춤 404 django 템플릿

그러나 나는 정말로 잘못된 것을하고 있다고 생각합니다. 내 로그에 잘못된 구문 오류가있어서 해결할 수 없습니다.

내 views.py :

# HTTP Error 400 
def page_not_found(request): 
    response = render_to_response('404.html',context_instance=RequestContext(request)) 
    response.status_code = 404 

    return response 

그리고 구문 오류 :

Traceback (most recent call last): 
File "/.../myenv/lib/python3.4/site-packages/django/core/urlresolvers.py", line 393, in urlconf_module 
return self._urlconf_module 
AttributeError: 'RegexURLResolver' object has no attribute '_urlconf_module' 
... 
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed 
File "/home/dcaled/work/portal-interface/portal/urls.py", line 12 
handler404 = 'views.handler404' 
      ^
SyntaxError: invalid syntax 

이 사람이 무슨 일이 일어나고 있는지에 대한 아이디어가 있습니까

? 감사합니다. .

업데이트 : @Alasdair 제안을 마친 후에 몇 가지 수정과 수정을했습니다. 오류가 중지되었습니다.

지금, 내 urls.py는 같다 :

handler404 = 'views.page_not_found' 

urlpatterns = [ 
    url(r'^$', views.home),]  

그러나이 아닌 기존의 페이지에 액세스 할 때 나는 아직도 내 사용자 지정으로 404.html을하지 않습니다. 대신, 기본 페이지는이 메시지와 함께로드됩니다. "

가 요청 된 URL/URL/404이 서버에서 찾을 수 없습니다 찾을 수 없음 "

또한

, 내 settings.py :

DEBUG = False 
ALLOWED_HOSTS = ['*'] 
TEMPLATE_DIRS = (os.path.join(BASE_DIR , 'portal/templates'),) 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

내 프로젝트 트리 :

├── fb_dev 
│   ├── __init__.py 
│   ├── __pycache__ 
│   ├── settings.py 
│   ├── urls.py 
│   └── wsgi.py 
├── manage.py 
│ 
└── portal 
   ├── admin.py 
   ├── forms.py 
   ├── json 
   ├── migrations 
   ├── models.py 
   ├── static 
   ├── templates 
   │   ├── 404.html 
   │   └── portal 
   │    ├── base.html 
   │    ├── home.html 
  ├── templatetags 
   ├── urls.py 
   └── views.py 
+0

어떤 장고 버전을 사용하고 있습니까? '404.html' 템플릿은 어디에 위치해 있습니까? – Alasdair

+0

내 버전은 1.8.5입니다. 그리고 템플릿 위치로 질문을 업데이트했습니다. – revy

+0

'템플레이트'설정이 있습니까? 코드의 다른 부분이'portal/templates'에서 템플릿을 성공적으로 찾을 수 있습니까? 404 페이지를 하이재킹하는 것은 귀하의 [브라우저] (http://stackoverflow.com/questions/2642340/django-404-page-not-showingup) 또는 귀하의 서버 (예 : Apache) 일 수 있습니까? – Alasdair

답변

2

몇 달이 지나면 문제를 다시 확인하고 해결 방법을 찾았습니다. 여기에 답이 있습니다 :

a) views.py에서 page_not_found 방법을 삭제했습니다. 추가 할 필요가 없습니다. Django는 404.html 템플릿을 자동으로 가져 와서 렌더링합니다.

b) 다시 한 번, urls.py을 편집 할 필요가 없습니다.

handler404 = 'views.page_not_found' 

C) 또한,이 FALSEDEBUG 설정, settings.py을 편집 할 필요가있다 : 그래서이 줄을 제거했습니다.마지막으로, 나는 내 portal/templates 디렉토리에으로 404.html 템플릿을 생성

TEMPLATE_DIRS = (os.path.join(BASE_DIR , 'portal/templates'),) 

D) :

DEBUG = False 

그리고

나는 다음 줄을 제거했습니다. 커스텀 템플리트가이 디렉토리 안에있을 때만 렌더링된다는 것을 알아 두는 것이 중요합니다.

1

handler404 외부 urlpatterns해야한다. 보기가 page_not_found이라면 handler404이 아니라 page_not_found을 참조해야합니다.

handler404 = 'views.page_not_found' 

urlpatterns = [ 
    url(r'^$', views.home), 
] 

그러나 사용자 정의 404 핸들러가 필요하지 않습니다. handler404 행을 완전히 삭제하면 기본값 page_not_found보기가 404.html 템플릿을 렌더링합니다.

+0

네, 맞습니다. 이 변경 사항을 적용했지만 사용자 정의 된 404 페이지는 아직 표시하지 않습니다. "Not Found 요청한 URL/url/404를이 서버에서 찾을 수 없음"만 표시합니다. 다른 생각? – revy

+0

아니요. 사실 DEBUG은 False입니다. – revy