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/またはに移動すると/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 に答える