我正在使用Django开发博客应用。当我在新帖子上单击“保存”按钮时出现错误,并且“后详细信息”页面不仅仅显示出来。自最近两天以来,我一直在尝试调试它,但仍然找不到解决方案。我使用的是Django(2.1.7),收到的错误是
NoReverseMatch在/ post / new /处为'post_detail'的反向位置,没有找到参数。尝试了1种模式:set selectedDate(val) {
console.log('setter');
this.dateValue = val;
this.selectedDateChange.emit(this.dateValue);
}
还有其他一些网址,但我只是给出了最有可能造成错误的2条路径。
我试图在我的CreateView中简单地给出redirect_field_name ='post_detail',但是然后我收到错误消息,即使我已经在模型中添加了get_absolute_url()方法也没有。
Models.py
['post/(?P<pk>\\d+)/$']
urls.py
class Post(models.Model):
author = models.ForeignKey('auth.user',on_delete=models.PROTECT)
title = models.CharField(max_length=200)
text = models.TextField()
create_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True,null=True)
objects = models.Manager()
comments = models.Manager()
def publish(self):
self.published_date = timezone.now
self.save()
def approve_comments(self):
return self.comments.filter(approved_comment=True)
def get_absoulute_url(self):
return reverse('post_detail',kwargs={'pk':self.pk})
def __str__(self):
return self.title
blogapp.urls
urlpatterns = [
path('admin/',admin.site.urls),
path('',include(blogapp.urls)),
]
views.py
urlpatterns = [
...
re_path(r'^post/(?P<pk>\d+)/$',views.PostDetailView.as_view(), name='post_detail'),
re_path(r'^post/new/',views.CreatePostView.as_view(),name='post_new'),
...
]
post_form.html
class PostDetailView(DetailView):
model = Post
class CreatePostView(LoginRequiredMixin, CreateView):
form_class = PostForm
model = Post
login_url = '/login/'
def get_success_url(self):
return reverse('post_detail')
在CreatePostView中点击保存按钮后,它应该返回PostDetailView,并且网址应从“ http://127.0.0.1:8000/post/new/”更改为“ http://127.0.0.1:8000/post/1”,但出现上述错误。
答案 0 :(得分:0)
您的成功网址应该有一个pk reverse('post_detail',args =(post.pk,))
答案 1 :(得分:0)
你应该在模型中试试这个:
('post_detail', args=(str(args=self.pk))
或者您应该尝试重定向到一个新页面,您可以在其中创建一个 URL 以重定向到 post_details
。