Django教程。通用视图上的404

时间:2011-09-21 20:00:57

标签: django django-templates django-views

更新:使用Dreamhost提供的Django 1.2.1和Python 2.5.2。

我遇到了Django教程最后一部分的问题,其中urls.py被更改为使用通用视图。更改代码后,我在页面上获得404,甚至索引也停止工作。

我已经浏览了所有模板以查看是否存在问题,但我删除了任何轮询实例并将其替换为对象。我还附加了index / object_list的模板。

我在Dreamhost上运行它,我设置的静态URL工作正常。

urls.py

from brsplash.models import Poll
from django.conf.urls.defaults import *
from django.contrib import admin
from django.views.generic import *
admin.autodiscover()

info_dict = {
    'queryset': Poll.objects.all(),
}
urlpatterns = patterns('',
    (r'^$', 'django.views.generic.list_detail.object_list', info_dict),
    (r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail',     info_dict),
    url(r'^(?P<object_id>\d+)/results/$', 'django.views.generic.list_detail.object_detail', dict(info_dict,     template_name='brsplash/results.html'), 'poll_results'),
    (r'^(?P<poll_id>\d+)/vote/$', 'brsplash.views.vote'),
)    

urlpatterns += patterns('',
(r'^admin/', include(admin.site.urls)),

poll_list.html

    {% if object_list %}
    <ul>
    {% for object in object_list %}
        <li><a href="{{ object.id }}/">{{ object.question }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available</p>
{% endif %}

2 个答案:

答案 0 :(得分:4)

Django 1.3引入了基于类的通用视图,它将取代这种基于函数的方法(参见documentation page顶部的注释),所以也许最好使用它们。

使用基于类的方法,您的新详细信息页面网址将如下所示:

from brsplash.models import Poll
...
from django.views.generic import ListView

urlpatterns = {'',
    url(r'^$', ListView.as_view(model=Poll)),
    ...
}

这种方法可以在part 4 of the tutorial中找到。

N.B。:我倾向于不将template_name参数传递给as_view,因为正如文档中所述:

ListView通用视图使用名为&lt; app name&gt; /&lt; model name&gt; _list.html
的默认模板

答案 1 :(得分:1)

  

您可以在Dreamhost上升级到Django 1.3:blog.oscarcp.com/?p=167 -   jturnbull 9月22日9:54

这解决了我遇到的urls.py问题。一旦我升级到1.3.1并更改了代码以反映它,我的页面又回来了。