如何使用 posts/1、posts/2 等设置我的网址?

How to set up my urls with posts/1, posts/2, etc?

我正在学习一些基本的 django 博客教程。我坚持的部分是如何在我的网址中设置变量。

我希望我的网址看起来像:

posts/1
posts/2
posts/3

目前,当我访问我的 index.html 时,我会看到博客文章列表(只有标题),当我将光标悬停在每个 link 上时,它会显示 posts/1, posts/2等

问题是当我点击这些link时,基本上只是刷新页面,并没有显示详细视图。

我的 urls.py 目前是这样的:

url(r'^posts/', index),
url(r'^posts/(?P<post_id>[0-9]+)/$', detailedview),

我不确定 (?P[0-9]+)/$' 到底做了什么,我假设这是问题所在,因为从未调用过详细视图。

此方法在我的 views.py 中,但同样,它从未被调用。

def detailedview(request, post_id):
    targetpost = Post.objects.get(id="post_id")
    context = {'targetpost': targetpost}
    return render(request, 'posts/detailedview.html', context)

关于第二个问题URL:

(?P<post_id>[0-9]+) 是一个正则表达式,意思是“将 post_id 参数设置为具有一位或多位数字的任何数字的值(更多信息请参见 https://docs.python.org/2/library/re.html。)

解决问题的方法是在第一个模式的末尾添加一个 $,因此它看起来像这样:

url(r'^posts/$', index),

这将使它只匹配 URL /posts/.

你的观点也有问题:那一行

    targetpost = Post.objects.get(id="post_id")

应该是:

    targetpost = Post.objects.get(id=post_id)

这将使 Django 查找变量 post_id 中指定的带有 idPost,而不是带有 idPost等于字符串 "post_id"