我有 post_list.html 文件:(忽略第二个'博客:post_detail'url)
{% 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 %}
在 urls.py 中,我尝试按以下方式使用 re_path :
re_path(r'^posts/<int:pk>/$', views.PostDetailView.as_view(), name='post_detail'),
当我运行服务器时,我收到 NoReverseMatch at / 错误:Reverse for 'post_detail' with arguments '(1,)' not found. 1 pattern(s) tried: ['posts/<int:pk>/$']
但是,如果我将 re_path 替换为 url ,将<int:pk>
替换为(?P<pk>\d+)
,则效果非常好:
url(r'^posts/(?P<pk>\d+)/$', views.PostDetailView.as_view(), name='post_detail'),
答案 0 :(得分:4)
您使用了错误的功能。 re_path
是url
的别名,因此它使用旧的正则表达式语法。如果要使用新语法,请使用path
。
答案 1 :(得分:1)
因为你的django不是2.0 +
django 2.0推荐使用路径
path(r'^posts/<int:pk>/$', views.PostDetailView.as_view(), name='post_detail')
如果你想使用正则表达式,比如django&lt; 2.0
re_path(r'^posts/(?P<pk>\d+)/$', views.PostDetailView.as_view(), name='post_detail'),
url(r'^posts/(?P<pk>\d+)/$', views.PostDetailView.as_view(), name='post_detail'),