如何使用 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
中指定的带有 id
的 Post
,而不是带有 id
的 Post
等于字符串 "post_id"
我正在学习一些基本的 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
中指定的带有 id
的 Post
,而不是带有 id
的 Post
等于字符串 "post_id"