我正在使用django创建我的博客,并尝试以笨拙的方式发布帖子网址,在我创建模型并在视图中调用它后,它向我显示此错误:
我尝试在[posts / views.py line:102]中更改“ id”,并将其设置为“ slug”,并在[line:104]中对其进行了编辑
在[posts / view.py第102行]:
def post_details(request, id):
post_list = Post.objects.active()
post = get_object_or_404(Post, id=id)
if post.publish > timezone.now().date() or post.draft:
if not request.user.is_authenticated or not request.user.is_superuser:
raise Http404
share_string = quote_plus(post.content)
initial_data = {
"content_type": post.get_content_type,
"object_id": post.id,
}
# post read time
read_time = get_read_time(post.content)
# print(type(read_time))
form = CommentForm(request.POST or None, initial=initial_data)
if form.is_valid():
c_type = form.cleaned_data.get('content_type')
content_type = ContentType.objects.get(model=c_type)
obj_id = form.cleaned_data.get('object_id')
content_data = form.cleaned_data.get('content')
parent_obj = None
try:
parent_id = int(request.POST.get('parent_id'))
except:
parent_id = None
if parent_id:
parent_qs = Comment.objects.filter(id=parent_id)
if parent_qs.exists() and parent_qs.count() == 1:
parent_obj = parent_qs.first()
new_comment, created = Comment.objects.get_or_create(
user = request.user,
content_type = content_type,
object_id = obj_id,
content = content_data,
parent = parent_obj,
)
return HttpResponseRedirect(new_comment.content_object.get_absolute_url())
comments = post.comments # Comment.objects.filter_by_instance(post) # without @property
context = {
'post': post,
'share_string': share_string,
'comments': comments,
'comment_form': form,
'read_time': read_time,
}
return render(request, 'post.html', context=context)
我希望帖子会被创建并正确添加到网址中
答案 0 :(得分:0)
您的post_details
函数采用request
(所有Django视图都应采用)和id
参数,但是在urls.py
中,您将提取名为slug
的参数。您的函数应该使用该参数,而不要使用id
。
答案 1 :(得分:0)
解决方案:通过在第53行编辑[post.html]解决了此问题
<!-- path: {% url 'posts:post' id=post.id %} <br> -->
并使其成为可接受的“ django注释”,例如:{##},因为服务器无法呈现html注释,因此我进行了如下编辑:
{# path: {% url 'posts:post' id=post.id %} #}<!-- <br> -->