Python 什么意思?:NoReverseMatch at/post_detail/12/
我的第一个问题,我刚开始学习Python,但是最近遇到了一个问题,可能问题会很简单,但是我花了三天时间,没有找到解决方案 这是回溯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
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}