django发布匹配查询不存在

时间:2016-03-18 19:16:06

标签: python django

在我的博客中添加帖子时,我收到以下错误Post matching query does not exist.我最近更改了所有的slug字段,但这与我认为无关

URL.py

url(r'^$', views.PostListView.as_view(),name='home'),
url(r'^(?P<slug>[\w-]+)/$', views.detail, name='detail'),
url(r'^editPost/(?P<slug>[\w-]+)/$', views.edit_post, name='edit_post'),
url(r'^deletePost/(?P<slug>[\w-]+)/$', views.delete_post, name='delete_post'),
url(r'^addPost/$', views.add_post, name='add_post'),

views.py

def detail(request, slug):
    post = Post.objects.get(slug=slug)
    comments=post.comment_set.all()
    forms=CommentForm
    if request.method == 'POST':
        form=CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.title = post
            print comment
            comment.save()
        else:
          print form.errors
    else:
        form = PostForm()

    return render(request, "blog_detail.html", {'forms':forms,'post': post,'comments':comments})

def add_post(request):
    forms = PostForm
    if request.method == 'POST':
        form = PostForm(request.POST)
        print form
        if form.is_valid():
            uncommit = form.save(commit=False)
            title= form.cleaned_data['title']
            description=form.cleaned_data['description']
            form.save()
            return redirect("home")
        else:
          print form.errors
    else:
        form = PostForm()
    return render(request, "add_post.html", {'forms': forms})

单击“添加”选项时会生成以下错误。 add_post的模板

add_post.html

{% block blog_post %}
    <form method="POST" action="{% url 'add_post'  %}">{% csrf_token %}
        {{ forms|crispy }}
        <input type="submit">
    </form>


{% endblock %}

回溯

Internal Server Error: /addPost/
Traceback (most recent call last):
  File "/home/amogh/PycharmProjects/interview/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/amogh/PycharmProjects/interview/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/amogh/PycharmProjects/interview/main_app/blog/views.py", line 40, in detail
    post = Post.objects.get(slug=slug)
  File "/home/amogh/PycharmProjects/interview/venv/local/lib/python2.7/site-packages/django/db/models/manager.py", line 122, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/amogh/PycharmProjects/interview/venv/local/lib/python2.7/site-packages/django/db/models/query.py", line 387, in get
    self.model._meta.object_name
DoesNotExist: Post matching query does not exist.

我真的不确定什么是错的,因为查询不存在...感谢任何帮助...提前感谢

1 个答案:

答案 0 :(得分:2)

当Django搜索URL模式时,它会选择匹配的第一个模式。目前,详情视图正在处理/addPost/,由于您没有addPost的帖子,因此会引发错误。

您可以通过将detail网址格式移至列表底部来解决此问题。

url(r'^$', views.PostListView.as_view(),name='home'),
url(r'^addPost/$', views.add_post, name='add_post'),
url(r'^editPost/(?P<slug>[\w-]+)/$', views.edit_post, name='edit_post'),
url(r'^deletePost/(?P<slug>[\w-]+)/$', views.delete_post, name='delete_post'),
url(r'^(?P<slug>[\w-]+)/$', views.detail, name='detail'),