2016-03-18 2 views
0

При добавлении пост в своем блоге, я получаю следующее сообщение об ошибке Post matching query does not exist. Недавно я изменил все поля слизняка, но это не связано, что я считаю,Джанго Сообщение сопоставления запросов не существует

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 %} 

Traceback

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. 

Im действительно не уверен, Что не так, как запрос не существует ... любая помощь приветствуется ... спасибо заранее

+0

Проверьте, если вы заяц объект Post с данной слизняком – Gocht

+2

вы можете редактировать этот вопрос с вашей StackTrace? Кроме того, в вашей оболочке django вы можете выполнить 'Post.objects.get (slug = slug)' и успешно получить объект Post? – karthikr

ответ

2

Когда Django ищет шаблоны URL-адресов, он выбирает первый шаблон, который соответствует. На данный момент обработчик /addPost/ обрабатывается подробным представлением, что вызывает ошибку, потому что у вас нет сообщения с addPost.

Вы можете исправить это, перемещая detail Шаблон URL-адреса в нижней части списка.

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'), 
Смежные вопросы