Python Django模板语法错误
我正在学习Django教程,当我试图访问它时,突然发现一个TemplateSyntaxError TemplateSyntaxError位于/admin/ 渲染时捕获ViewDoesNotExist:在模块polls.views中尝试了结果。错误为:“模块”对象没有属性“结果” 它突出了这一行: {%url'django admindocs docroot'作为docsroot%} 在我进入教程的第3部分并弄乱了URL之前,管理页面的工作非常有魅力,尽管我完全按照他们说的那样做,所以我怀疑这是问题所在 URL.py:Python Django模板语法错误,python,django,Python,Django,我正在学习Django教程,当我试图访问它时,突然发现一个TemplateSyntaxError TemplateSyntaxError位于/admin/ 渲染时捕获ViewDoesNotExist:在模块polls.views中尝试了结果。错误为:“模块”对象没有属性“结果” 它突出了这一行: {%url'django admindocs docroot'作为docsroot%} 在我进入教程的第3部分并弄乱了URL之前,管理页面的工作非常有魅力,尽管我完全按照他们说的那样做,所以我怀疑这是问
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)),
)
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)
这就是你所需要的。忽略模板语法错误
,它与模板根本不相关。Django告诉你你没有这个:
def results(request):
# do something
在your views.py中。当您开始编写URL并引用其中实际不存在的函数时,您将在管理员之外收到ViewDoesNotExist
错误,因此请确保在编写过程中,您要么确保您拥有只返回基本200的存根函数,要么注释掉这些URL,直到需要它们为止
从技术上讲,这是python错误的扩展。如果您运行:
$ python manage.py shell
>>> from poll import views
x = views.results
你会得到一份工作
既然您问了为什么,如果您查看Django/core/urlsolvers.py
中的内容,您会看到:
_callable_cache = {} # Maps view and url pattern names to their view functions.
因此,基本上,到函数的视图映射(URL或其他)的缓存是以hashmap(字典)的形式进行的。这是由以下函数构造的:
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)
它计算每个回调以检查它是否存在(换行符是我的)。post-you poll/views.py文件。这似乎就是错误isI向views.py添加def results的地方,它起了作用,但为什么呢?django就不能忽略它吗?在django有些事情有时候就是没有意义。嗯,它有完美的意义。当有人访问URL/polls/1234/results/时,将从your views.py调用函数“results”,并将参数id传递给它。然后,该函数呈现模板并将其返回给用户。这是Django的工作方式,但我不访问结果。您告诉Django,当您将视图放在URL.py中时,它是存在的。当有人检查网页时,Django会检查您的所有URL,因此它会查找该视图(您尚未创建)谢谢!现在我明白了为什么它没有被忽视。
_callable_cache = {} # Maps view and url pattern names to their view functions.
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)