如何修复Django中的反向匹配URL错误?

时间:2019-07-31 17:32:20

标签: regex django url django-models django-views

我正在使用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”,但出现上述错误。

2 个答案:

答案 0 :(得分:0)

您的成功网址应该有一个pk reverse('post_detail',args =(post.pk,))

答案 1 :(得分:0)

你应该在模型中试试这个:

('post_detail', args=(str(args=self.pk))

或者您应该尝试重定向到一个新页面,您可以在其中创建一个 URL 以重定向到 post_details