0

blog我的根 url conf 中有一个命名空间下的应用程序:

urlpatterns = patterns('',                                                                                                                                                                                                                                                    
    url(r'^blog/', include('blog.urls', namespace='blog')),                   
)

这是我在博客索引下的正则表达式blog.urls

urlpatterns = patterns('', 
    url(r'^(?:(?P<page_num>\d+)/)?$', views.index, name='index'),
)

这是我的博客索引视图:

def index(request, page_num):
    if not page_num:
        return redirect('blog:index', args=[1])
    post_list = Post.objects.all()
    p = Paginator(post_list, 10)

    try:
        posts = p.page(page_num)
    except PageNotAnInteger:
        posts = p.page(1)
    except EmptyPage:
        posts = p.page(p.num_pages)

    return render(request, 'blog/index.html', { 'post_list': posts })

基本上,我希望/blog/1/在您导航到 时将 url 重定向到/blog/,这就是我page_num选择的原因。而且,当然要去/blog/n/哪里应该导航到适当的分页页面np.page_range

但是,当我转到/blog/or时/blog/1/,什么都没有加载,最终 Django 给了我“没有收到数据”错误。我感觉我的正则表达式写错了,但是我尝试了许多排列并且没有任何运气(大多数给我“找不到页面”错误)。

我也在官方 Django 文档中尝试过这种模式blog.urls,即在:

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^(?<page_num>\d+)/$', views.index, name='index'), 
)

这在我的博客索引视图中:

def index(request, page_num=1):
   ....(the rest the same as above)...

但是当我导航到时,这给了我以下错误/blog/

TypeError at /blog/
index() takes exactly 2 arguments (1 given)

当我去时出现“未收到数据”错误/blog/1/

4

1 回答 1

5

视图函数page_num属性没有默认值,因此它不是可选的。改变:

def index(request, page_num):

def index(request, page_num=None):

作为旁注。您可能还应该更改代码:

if not page_num:

if page_num is None:

那更明确。否则会有多个不同的值会触发重定向,例如0.

于 2013-10-10T17:04:05.983 回答