我的root url conf中的blog
下有一个名为app的应用程序:
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/
时将网址重定向到/blog/
,这就是我page_num
可选的原因。当然,转到/blog/n/
n
/blog/
所在的/blog/1/
应导航到相应的分页页面。
但是,当我转到blog.urls
或urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^(?<page_num>\d+)/$', views.index, name='index'),
)
时,没有任何内容加载,最终Django给了我“收到数据”错误。我觉得我正在写我的正则表达式错误,但我尝试了一些排列并且没有任何运气(大多数给我“找不到页面”错误)。
我还在官方Django文档中尝试过p.page_range
,即在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/
时,这会给我以下错误:
{{1}}
当我转到{{1}}时,收到“没有收到数据”错误。
答案 0 :(得分:5)
视图函数page_num
属性没有默认值,因此不可选。变化:
def index(request, page_num):
到
def index(request, page_num=None):
作为旁注。您可能还应该更改代码:
if not page_num:
到
if page_num is None:
这更明确。否则,会有多个不同的值会触发重定向,例如0
。