【发布时间】:2018-11-21 11:28:17
【问题描述】:
我正在阅读 Django 教程,并在尝试在我的博客应用程序中编辑帖子时收到此错误。我使用 Django 版本:2.0.6 和 Python 版本:3.6.5。
models.py
from django.db import models
class BlogPost(models.Model):
title = models.CharField(max_length=100)
text = models.TextField()
def __str__(self):
return self.title
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^new_post/', views.new_post, name='new_post'),
url(r'^edit_post/(?P<post_id>\d+)/$', views.edit_post, name='edit_post'),
]
导致第 3 行错误的模板 - edit_post.html。错误消息突出显示 {% url 'edit_post' post.id %}
{% block content %}
<form action="{% url 'edit_post' post.id %}" method='post'>
{% csrf_token %}
{{ form.as_p }}
<button name="submit">save changes</button>
</form>
{% endblock content %}
带有指向 edit_post.html 链接的模板 (index.html)
{% block content %}
<form action="{% url 'new_post' %}" method='post'>
{% csrf_token %}
{{ form.as_p }}
<button name="submit">Make a new post</button>
</form>
<ul>
{% for post in posts %}
<li>
{{ post.id }} - {{ post.title }}
<p>{{ post.text }}</p>
<a href="{% url 'edit_post' post.id %}">edit post</a>
</li>
{% empty %}
<li>No posts have been added yet.</li>
{% endfor %}
</ul>
{% endblock content %}
views.py
def edit_post(request, post_id):
post = BlogPost.objects.get(id=post_id)
text = post.text
title = post.title
if request.method != 'POST':
form = BlogForm(instance=post)
else:
form = BlogForm(instance=post, data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('index'))
context = {'title': title, 'text': text, 'form': form}
return render(request, 'blog/edit_post.html', context)
forms.py
from django import forms
from .models import BlogPost
class BlogForm(forms.ModelForm):
class Meta:
model = BlogPost
fields = ['title', 'text']
问题
当我点击索引页面上的 edit post 链接时,我收到上述错误。使用这种方法创建新帖子完美无缺,但编辑却不行。 我被这个问题困住了,不知道出了什么问题。
我的尝试
- 我已尝试将 django.conf.urls.url 替换为 django.urls.path 和相应的模式。
- 我已更改按钮的链接。
- 我试过了
- 我已经阅读了 StackOverflow 上的 What is a NoReverseMatch error, and how do I fix it? 以及我能找到的尽可能多的主题。
感谢任何帮助。提前谢谢!
【问题讨论】: