我有这个post_list.html文件:(忽略第二个'blog:post_detail'网址)
{% for post in post_list %}
<h1><a href="{% url 'blog:post_detail' post.pk %}">{{ post.title }}</a></h1>
<div class="date">
<p>Published on: {{post.published|date:"D M Y"}}</p>
</div>
<a href="{url 'blog:post_detail' post.pk}">Comments: {{post.approve_comments.count}}</a>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
在urls.py中,我尝试通过以下方式使用re_path:
re_path(r'^posts/<int:pk>/$', views.PostDetailView.as_view(), name='post_detail'),
Run Code Online (Sandbox Code Playgroud)
当我运行服务器时,我在/错误处获取NoReverseMatch:Reverse for 'post_detail' with arguments '(1,)' not found. 1 pattern(s) tried: ['posts/<int:pk>/$']
但是如果我更换re_path与网址,并<int:pk>用(?P<pk>\d+)它完美:
url(r'^posts/(?P<pk>\d+)/$', views.PostDetailView.as_view(), name='post_detail'),
Run Code Online (Sandbox Code Playgroud)
因为你的 Django 不是 2.0+
django 2.0 推荐使用路径
path(r'^posts/<int:pk>/$', views.PostDetailView.as_view(), name='post_detail')
Run Code Online (Sandbox Code Playgroud)
如果你想使用正则表达式,比如 django<2.0
re_path(r'^posts/(?P<pk>\d+)/$', views.PostDetailView.as_view(), name='post_detail'),
Run Code Online (Sandbox Code Playgroud)
url(r'^posts/(?P<pk>\d+)/$', views.PostDetailView.as_view(), name='post_detail'),
Run Code Online (Sandbox Code Playgroud)