Python 什么意思?:NoReverseMatch at/post_detail/12/

Python 什么意思?:NoReverseMatch at/post_detail/12/,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,我的第一个问题,我刚开始学习Python,但是最近遇到了一个问题,可能问题会很简单,但是我花了三天时间,没有找到解决方案 这是回溯 Environment: Request Method: GET Request URL: http://127.0.0.1:8000/post_detail/12/ Django Version: 2.0.4 Python Version: 3.5.2 Installed Applications: ['django.contrib.admin', 'dj

我的第一个问题,我刚开始学习Python,但是最近遇到了一个问题,可能问题会很简单,但是我花了三天时间,没有找到解决方案

这是回溯

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/post_detail/12/

Django Version: 2.0.4
Python Version: 3.5.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'blogs']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template /home/am/Documents/PycharmProjects/practice/19.1_Blog/blogs/templates/blogs/base.html, error at line 0
   Reverse for 'edit_post' with arguments '('',)' not found. 1 pattern(s) tried: ['edit_post/(?P<post_id>\\d+)/']
   1 : <p>
   2 :     <a href="{% url 'blogs:index' %}">My blogs</a> -
   3 : 
   4 :     <a href="{% url 'blogs:all_post' %}">All Post</a>
   5 : </p>
   6 : 
   7 : {% block content %}
   8 : 
   9 : {% endblock content %}

Traceback:

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
  35.             response = get_response(request)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  128.                 response = self.process_exception_by_middleware(e, request)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  126.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/blogs/views.py" in post_detail
  32.     return render(request, 'blogs/post_detail.html', context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/shortcuts.py" in render
  36.     content = loader.render_to_string(template_name, context, request, using=using)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/loader.py" in render_to_string
  62.     return template.render(context, request)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/backends/django.py" in render
  61.             return self.template.render(context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/base.py" in render
  175.                     return self._render(context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/base.py" in _render
  167.         return self.nodelist.render(context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/base.py" in render
  943.                 bit = node.render_annotated(context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  910.             return self.render(context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  155.             return compiled_parent._render(context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/base.py" in _render
  167.         return self.nodelist.render(context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/base.py" in render
  943.                 bit = node.render_annotated(context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  910.             return self.render(context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  67.                 result = block.nodelist.render(context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/base.py" in render
  943.                 bit = node.render_annotated(context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  910.             return self.render(context)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  447.             url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/urls/base.py" in reverse
  88.     return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))

File "/home/am/Documents/PycharmProjects/practice/19.1_Blog/11_bg/lib/python3.5/site-packages/django/urls/resolvers.py" in _reverse_with_prefix
  632.         raise NoReverseMatch(msg)

Exception Type: NoReverseMatch at /post_detail/12/
Exception Value: Reverse for 'edit_post' with arguments '('',)' not found. 1 pattern(s) tried: ['edit_post/(?P<post_id>\\d+)/']
编辑post.html

{% extends 'blogs/base.html' %}
{% block content %}


  <p>Edit post:</p>

   <form action="{% url 'blogs:edit_post' post_id %}" method='post'>
    {% csrf_token %}
    {{ form.as_p }}
    <button name="submit">save changes</button>
  </form>

{% endblock content %}
{% extends 'blogs/base.html' %}

{% block content %}

  <p>Title:{{ p_id.title }}</p>
  <p>Edit post</p>
  <p><a href="{% url 'blogs:edit_post' post_id %}">Edit post</a></p>

 <ul>
     <li>
         <p>Time:{{ p_id.date_added|date:'M d, Y H:i' }}</p>
         <p>Post:{{ p_id.text|linebreaks }}</p>
     </li>

 </ul>

{% endblock content %}
post_detail.html

{% extends 'blogs/base.html' %}
{% block content %}


  <p>Edit post:</p>

   <form action="{% url 'blogs:edit_post' post_id %}" method='post'>
    {% csrf_token %}
    {{ form.as_p }}
    <button name="submit">save changes</button>
  </form>

{% endblock content %}
{% extends 'blogs/base.html' %}

{% block content %}

  <p>Title:{{ p_id.title }}</p>
  <p>Edit post</p>
  <p><a href="{% url 'blogs:edit_post' post_id %}">Edit post</a></p>

 <ul>
     <li>
         <p>Time:{{ p_id.date_added|date:'M d, Y H:i' }}</p>
         <p>Post:{{ p_id.text|linebreaks }}</p>
     </li>

 </ul>

{% endblock content %}
{%extends'blogs/base.html%}
{%block content%}
标题:{p_id.Title}

编辑文章

  • 时间:{{p_id.date_added}日期:'md,yh:i'}

    帖子:{p_id.text | linebreaks}

{%endblock内容%}
现在我想实现一个功能来编辑我的博客文章,但我尝试了很多次,我没有发现任何问题。
我想问题出在编辑帖子的url上,但我找不到问题所在。谢谢您的帮助。

您没有在模板上下文中包含
post\u id

def post_detail(request, post_id):

    context = {'p_id': p_id, 'post_date': post_date, 'post_title': post_title, 'post_text': post_text}
    return render(request, 'blogs/post_detail.html', context)
def post_detail(request, post_id):
    ...
    post_id = p_id.id    
    context = {'p_id': p_id, 'post_date': post_date, 'post_title': post_title, 'post_text': post_text, 'post_id': post_id}
    return render(request, 'blogs/post_detail.html', context)
因此,下面的url标记不起作用

<a href="{% url 'blogs:edit_post' post_id %}">Edit post</a>
但是,不需要单独包含所有字段。只需将帖子包含在模板中

def post_detail(request, post_id):
    post = BlogPost.objects.get(id=post_id)
    context = {'post': post}
    return render(request, 'blogs/post_detail.html', context)
注意,我已经将变量名从
p_id
更改为
post
,因为它是一个模型实例,而不是一个id

然后在模板中,您可以从
post
访问字段:

 <p>Title:{{ post.title }}</p>
 <p>Edit post</p>
 <p><a href="{% url 'blogs:edit_post' post.id %}">Edit post</a></p>

 <ul>
     <li>
         <p>Time:{{ post.date_added|date:'M d, Y H:i' }}</p>
         <p>Post:{{ post.text|linebreaks }}</p>
     </li>

 </ul>
标题:{{post.Title}

编辑文章

  • 时间:{post.date|date:'md,yh:i'}

    Post:{Post.text | linebreaks}}


在post\u详细视图中,您将此上下文发送到模板

context = {'p_id': p_id, 'post_date': post_date, 'post_title': post_title, 'post_text': post_text}
然后在post_detail.html中,您试图将名为“post_id”的变量发送到URL:

<p><a href="{% url 'blogs:edit_post' post_id %}">Edit post</a></p>

非常感谢您,现在代码正在运行,我尝试了它,但我没想到它会出错,但我的代码中有一个小问题。上下文和返回未缩进。我原谅我的粗心。现在没事了。我可以安睡。大家晚安!非常感谢,现在代码正在运行,大家晚安!啊哈
<p><a href="{% url 'blogs:edit_post' post_id %}">Edit post</a></p>
context = {'post_id': post_id, 'p_id': p_id, 'post_date': post_date, 'post_title': post_title, 'post_text': post_text}