2011-06-12 5 views
8

Django 튜토리얼을 따라 갑자기 http://127.0.0.1:8000/admin/에 액세스하려고하면 TemplateSyntaxError가 표시됩니다. 관리자 /에서Django TemplateSyntaxError

TemplateSyntaxError/렌더링하는 동안 ViewDoesNotExist을 잡았다

: 모듈 polls.views에서 시도 결과. 오류 : '모듈'개체가없는 속성 '결과'

그것은이 라인을 강조

: {% URL이 '장고 admindocs-docroot를'docsroot의 % 등이}

관리 페이지가 I 때까지 마법처럼 일했다 자습서의 제 3 부분을 얻었고 URL을 엉망으로 만들었지 만, 그들이 말한 것과 정확히 같았지만 문제가 의심 스럽습니다.

urls.py :

from django.conf.urls.defaults import * 

from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    (r'^polls/$', 'polls.views.index'), 
    (r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail'), 
    (r'^polls/(?P<poll_id>\d+)/results/$', 'polls.views.results'), 
    (r'^polls/(?P<poll_id>\d+)/vote/$', 'polls.views.vote'), 
    (r'^admin/', include(admin.site.urls)), 
) 

admin.py :

from polls.models import Poll 
from polls.models import Choice 
from django.contrib import admin 

class ChoiceInline(admin.TabularInline): 
    model = Choice 
    extra = 0 

class PollAdmin(admin.ModelAdmin): 
    fieldsets = [ 
     (None, {'fields': ['question']}), 
     ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), 
    ] 
    inlines = [ChoiceInline] 
    list_display = ('question', 'pub_date') 
    list_filter = ['pub_date'] 
    search_fields = ['question'] 
    date_hierarchy = 'pub_date' 

admin.site.register(Poll, PollAdmin) 

views.py : 거의 모든 당신이 필요로의

from django.http import HttpResponse 
from polls.models import Poll 
from django.template import Context, loader 

def index(request): 
    latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5] 
    t = loader.get_template('polls/index.html') 
    c = Context({ 
     'latest_poll_list': latest_poll_list, 
    }) 
    return HttpResponse(t.render(c)) 

def detail(request, poll_id): 
    return HttpResponse("You're looking at poll %s. " % poll_id) 

def vote(request, poll_id): 
    return HttpResponse("You're voting on poll %s." % poll_id) 
+2

귀하가 poll/views.py 파일에 게시하십시오. 오류가 –

+0

인 것으로 보입니다. views.py에 def 결과를 추가했는데 효과가있었습니다. 그러나 그 이유는 무엇입니까? 장고는 그냥 무시할 수 없습니까? 장고의 어떤 것들은 때로는 이해가 가지 않는 경우가 있습니다. – Lockhead

+0

음, 완벽한 의미입니다. 다른 사람이/polls/1234/results/URL을 방문하면 views.py에서 "results"함수가 호출되고 인수 ID가 전달됩니다. 이 함수는 템플릿을 렌더링하여 사용자에게 반환합니다. 장고가 작동하는 방법입니다. –

답변

15
Caught ViewDoesNotExist while rendering: Tried results in module polls.views. 
Error was: 'module' object has no attribute 'results' 

. TemplateSyntaxError을 무시하면 템플릿과 전혀 관련이 없습니다. 장고는 다음과 같은 메시지를 표시합니다.

def results(request): 
    # do something 

당신의 views.py에서. 실제로 쓸모가없는 URL 쓰기 및 기능을 시작할 때 admin 외부에서 ViewDoesNotExist 오류가 발생하므로, 기본 200을 반환하는 스텁 함수가 있는지 확인하십시오. 당신이 그들을 필요로 할 때까지 그 URL을 주석 처리하십시오.

기술적으로 이것은 파이썬 오류의 확장입니다. 당신이 실행하는 경우 :

$ python manage.py shell 
>>> from poll import views 
x = views.results 

당신은 AttributeError를 얻을 것입니다. 해시 맵의 형태로 제조되는 기능에 따라서 기본적으로

_callable_cache = {} # Maps view and url pattern names to their view functions. 

(어떤 URL이나) 뷰 매핑 캐시 : 당신은 당신이 Django/core/urlresolvers.py에서 보면 당신은 선을 볼 수 있습니다 이유를 물었다 때문에

(사전).

def _get_callback(self): 
    if self._callback is not None: 
     return self._callback 
    try: 
     self._callback = get_callable(self._callback_str) 
    except ImportError, e: 
     mod_name, _ = get_mod_func(self._callback_str) 
     raise ViewDoesNotExist("Could not import %s. Error was: %s" % (
                  mod_name, str(e))) 
    except AttributeError, e: 
     mod_name, func_name = get_mod_func(self._callback_str) 
     raise ViewDoesNotExist("Tried %s in module %s. Error was: %s" % (
                func_name, mod_name, str(e))) 
    return self._callback 
callback = property(_get_callback) 

각 콜백이 존재하는지 확인하기 위해 각 콜백을 평가합니다 (줄 바꿈은 내 것임).

+0

고마워요! 이제 나는 그것이 무시되지 않는 이유를 알아 본다. – Lockhead

관련 문제