1

私は Python のバックグラウンドがあり、いくつかの Django チュートリアルを実行しようとしてきました。一般的なアイデアは理解できましたが、まだ初心者なので、いくつかの例に従うことをお勧めします。

私は現在、単純なブログアプリを構築する方法の「Django by example」チュートリアルに取り組んでいます (リンクはhttp://lightbird.net/dbe/blog.htmlです)。各投稿のページに取り組んでいます。

彼はリダイレクト リンクで非常に奇妙なことをしているので、Django のドキュメントが投票アプリで行っていることを行う方がよいと思いました。そして、これが問題です-まったく機能しません。それだけでなく、エラーが発生しないため、何が問題なのかわかりません。実際に何が起こったのか、まったく意味がありません。

これは私のurls.pyコードです:

urlpatterns = patterns('',
    url(r'^blog/', 'blog.views.main'),
    url(r'^blog/(?P<post_id>\d+)/$', 'blog.views.post'),
)

これは私のviews.pyコードです:

def main(request):
    """Main listing."""
    posts = Post.objects.all().order_by("-created")
    paginator = Paginator(posts, 2)

    try: page = int(request.GET.get("page", '1'))
    except ValueError: page = 1

    try:
        posts = paginator.page(page)
    except (InvalidPage, EmptyPage):
        posts = paginator.page(paginator.num_pages)

    return render_to_response("list.html", dict(posts=posts, user=request.user))

def post(request, post_id):
    post = Post.objects.get(pk=post_id)
    d = dict(post=post, user=request.user)
    return render_to_response("post.html", d)

これは(私の)HTMLコードの一部です:

{% for post in posts.object_list %}
    <div class="title">
        <a href="/blog/{{ post.id }}/">{{ post.title }}</a></div>
            <ul>
                <div class="time">{{ post.created }}</div>
                <div class="body">{{ post.body|linebreaks }}</div>
            </ul>
{% endfor %}

そのため、私のホームページは問題なく表示され、その開発 URL は 127.0.0.1:8000/blog です。投稿のタイトル (投稿番号 3 など) をクリックすると、本来のように 127.0.0.1:8000/blog/3 に移動します。

しかし、新しい「post.html」テンプレートを取得する代わりに、それはいまいましいホームページにとどまります。URLを変更して直接見つけようとしてもうまくいきません。

あたかも URL パターンが最初のオプションを探して見つけ、「十分だ」と言って、他のオプションをわざわざ実行しなかったかのようです。そして奇妙なことに、urls.py で投稿ビューの URL を変更し、「ブログ」の部分を削除すると、次のようになります。

url(r'^(?P<post_id>\d+)/$', 'blog.views.post')

それはおかしくなります。しかし、私は自分の URL に「ブログ」の部分を残したいと思っています。とにかく、自分が間違っていることを理解していません。ここに。

4

1 に答える 1

1

$最初の URL の末尾にa を追加する必要があると思います。

urlpatterns = patterns('',
    url(r'^blog/$', 'blog.views.main'),
    url(r'^blog/(?P<post_id>\d+)/$', 'blog.views.post'),
)

または、最初の URL の前に 2 番目の URL を配置することもできます。Django は上から下に一致を探し、最初の一致を選択します。

urlpatterns = patterns('',
    url(r'^blog/(?P<post_id>\d+)/$', 'blog.views.post'),
    url(r'^blog/$', 'blog.views.main'),
)
于 2013-01-13T13:08:48.720 に答える