如何解决未找到参数为 '(1,)' 的 'new_entry' 反转尝试了 1 个模式:['new_entry/<int:post_id/$']
我目前正在编写“Python 速成课程”一书中的教程。本教程是关于使用 Django 创建“博客”Web 应用程序的。这个想法是在项目中创建一个名为 blogs 的应用程序和一个名为 BlogPost 的模型。模型应该有像 post、text 和 date_ added 这样的字段。为项目创建一个超级用户,并使用管理站点制作几个简短的帖子。制作一个按时间顺序显示所有帖子的主页。创建一个用于发布新帖子的表单和另一个用于编辑现有帖子的表单。填写您的表格以确保它们有效。
当我运行 http://127.0.0.1:8000/posts/1/
时,我目前无法编辑现有的条目表单并收到错误消息我已经阅读了与我类似问题的答案,但他们提出的解决方案已经过审核,但仍然出现错误。我不理解为什么。如果有人能帮助我,我将不胜感激。
views.py
from django.shortcuts import render,redirect
from .models import BlogPost,Entry
from .forms import BlogPostForm,EntryForm
def index(request):
"""The home page for blog."""
return render(request,'blogs/index.html')
def posts(request):
"""Show all posts."""
posts = BlogPost.objects.order_by('date_added')
context = {'posts': posts}
return render(request,'blogs/posts.html',context)
def post(request,post_id):
"""Show a single post and all its entries."""
post = BlogPost.objects.get(id=post_id)
entries = post.entry_set.order_by('-date_added')
context = {'post': post,'entries': entries}
return render(request,'blogs/post.html',context)
def new_post(request):
"""Add a new post."""
if request.method != 'POST':
# No data submitted; create a blank form.
form = BlogPostForm()
else:
# POST data submitted; process data.
form = BlogPostForm(data=request.POST)
if form.is_valid():
form.save()
return redirect('blogs:posts')
# display a blank or invalid form.
context = {'form': form}
return render(request,'blogs/new_post.html',context)
def new_entry(request,post_id):
"""Add a new entry for a particular post."""
post = BlogPost.objects.get(id=post_id)
if request.method != 'POST':
# No data submitted; create a black form.
form = EntryForm()
else:
# POST data submitted,process data.
form = EntryForm(data=request.POST)
if form.is_valid():
new_entry = form.save(commit=False)
new_entry.post = post
new_entry.save()
return redirect('blogs:post',post_id=post_id)
# display a blank or invalid form.
context = {'post': post,'form': form}
return render(request,'blogs/new_entry.html',context)
def edit_entry(request,entry_id):
"""Edit an existing entry."""
entry = Entry.objects.get(id=entry_id)
post = entry.post
if request.method != 'POST':
# Initial request; pre-fill form with the current entry.
form = EntryForm(instance=entry)
else:
# POST data submitted; process data.
form = EntryForm(instance=entry,data=request.POST)
if form.is_valid():
form.save()
return redirect('blogs:post',post_id=post.id)
context = {'entry': entry,'post': post,'blogs/edit_entry.html',context)
urls.py
"""Defines URL patterns for blogs."""
from django.urls import path
from . import views
app_name = 'blogs'
urlpatterns = [
# Home page
path('',views.index,name='index'),# Page that shows all posts.
path('posts/',views.posts,name='posts'),# Detail page for a single post.
path('posts/<int:post_id>/',views.post,name='post'),# Page for adding a new post.
path('new_post/',views.new_post,name='new_post'),# Page for adding a new entry.
path('new_entry/<int:post_id/',views.new_entry,name='new_entry'),# Page for editing an entry.
path('edit_entry/<int:entry_id>/',views.edit_entry,name='edit_entry'),]
models.py
from django.db import models
class BlogPost (models.Model):
"""A post the user is learning or writing."""
post = models.CharField(max_length=80)
date_added = models.DateTimeField(auto_Now_add=True)
def __str__(self):
"""Return a string representation of the model."""
return self.post
class Entry(models.Model):
"""Post content."""
post = models.ForeignKey(BlogPost,on_delete=models.CASCADE)
text = models.TextField()
date_added = models.DateTimeField(auto_Now_add=True)
class Meta:
verbose_name_plural = 'entries'
def __str__(self):
"""Return a string representation of the model"""
return f"{self.text}"
admin.py
from django.contrib import admin
from .models import BlogPost,Entry
admin.site.register(BlogPost)
admin.site.register(Entry)
forms.py
from django import forms
from .models import BlogPost,Entry
class BlogPostForm(forms.ModelForm):
class Meta:
model = BlogPost
fields = ['post']
labels = {'post': ''}
class EntryForm(forms.ModelForm):
class Meta:
model = Entry
fields = ['text']
labels = {'text': ''}
widgets = {'text': forms.Textarea(attrs={'cols': 80})}
这些是模板:
base.html
<p>
<a href="{% url 'blogs:index' %}">Carmen's blog</a> -
<a href="{% url 'blogs:posts' %}">Posts</a>
</p>
{% block content %}{% endblock content %}
posts.html
{% extends 'blogs/base.html' %}
{% block content %}
<p>Posts</p>
<ul>
{% for post in posts %}
<li>
<a href="{% url 'blogs:post' post.id %}">{{ post }}</a>
</li>
{% empty %}
<li>No posts have been added yet.</li>
{% endfor %}
</ul>
<a href="{% url 'blogs:new_post' %}">Add a new post</a>
{% endblock content %}
post.html
{% extends 'blogs/base.html' %}
{% block content %}
<p>Post: {{ post }}</p>
<p>Entries:</p>
<p>
<a href="{% url 'blogs:new_entry' post.id %}">Add new entry</a>
</p>
<ul>
{% for entry in entries %}
<li>
<p>{{ entry.date_added|date:'M d,Y H:i' }}</p>
<p>{{ entry.text|linebreaks }}</p>
<p>
<a href="{% url 'blogs:edit_entry' entry.id %}">Edit entry</a>
</p>
</li>
{% empty %}
<li>There are no entries for this post yet.</li>
{% endfor %}
</ul>
{% endblock content %}
new_post.hmtl
{% extends 'blogs/base.html' %}
{% block content %}
<p>Add a new post:</p>
<form action="{% url 'blogs:new_post' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<button name="submit">Add post.</button>
</form>
{% endblock content %}
new_entry.html
{% extends 'blogs/base.html' %}
{% block content %}
<p><a href="{% url 'blogs:post' post.id %}">{{ post }}</a></p>
<p>Add a new entry:</p>
<form action="{% url 'blogs:new_entry' post.id %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<button name="submit">Add entry.</button>
</form>
{% endblock content %}
edit_entry.html
{% extends 'blogs/base.html' %}
{% block content %}
<p><a href="{% url 'blogs:post' post.id %}">{{ post }}</a></p>
<p>Edit entry:</p>
<form action="{% url 'blogs:edit_entry' entry.id %}" method='post'>
{% csrf_token %}
{{ form.as_p }}
<button name="submit">Save changes</button>
</form>
{% endblock content %}
谢谢十亿,我快崩溃了:(
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。