python - django 异常:未找到带有关键字参数“{'pk':''}' 的“comment_new”的反向
问题描述
我对 python/Django 很陌生,我目前想实现我的每一篇博文都可以有评论。但我不明白这一点。我以与我的帖子模型相同的方式创建所有内容期望我
Exception Type: NoReverseMatch
Exception Value: Reverse for 'comment_new' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['comment/new/$']
网址.py:
from django.conf.urls import url
from django.contrib import admin
from . import views
urlpatterns = [
url(r'^admin/', (admin.site.urls)),
url(r'^$', views.post_list, name='post_list'),
url(r'^post/(?P<pk>\d+)/$', views.post_detail, name='post_detail'),
url(r'^post/new/$', views.post_new, name='post_new'),
url(r'^post/(?P<pk>\d+)/edit/$', views.post_edit, name='post_edit'),
url(r'^comment/new/$', views.comment_new, name='comment_new'),
url(r'^comment/(?P<pk>\d+)/edit/$', views.comment_edit, name='comment_edit'),
]
视图.py:
from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone
from .models import Post
from .models import Comment
from .forms import PostForm, CommentForm
def post_list(request):
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
return render(request, 'quickblog/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'quickblog/post_detail.html', {'post': post})
def post_new(request):
form = PostForm()
return render(request, 'quickblog/post_edit.html', {'form': form})
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'quickblog/post_new.html', {'form': form})
def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = PostForm(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm(instance=post)
return render(request, 'quickblog/post_edit.html', {'form': form})
def comment_edit(request, pk):
comment = get_object_or_404(Comment, pk=pk)
if request.method == "POST":
form = PostForm(request.POST, instance=comment)
if form.is_valid():
comment = form.save(commit=False)
comment.author = request.user
comment.published_date = timezone.now()
comment.save()
return redirect('post_detail', pk=comment.pk)
else:
form = PostForm(instance=comment)
return render(request, 'quickblog/comment_edit.html', {'form': form})
def comment_new(request):
if request.method == "POST":
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.author = request.user
comment.published_date = timezone.now()
comment.save()
return redirect('post_detail', pk=comment.pk)
else:
form = CommentForm()
return render(request, 'quickblog/comment_new.html', {'form': form})
post_detail.html:
{% extends 'quickblog/base.html' %}
{% block content %}
<div class="post">
<h1>{{ post.title }}</h1>
<p>{{ post.text|linebreaksbr }}</p>
{% if post.published_date %}
<div class="date">
<a>Posted at: {{ post.published_date }}</a>
</div>
{% endif %}
{% if user.is_authenticated %}
<a class="btn btn-default" href="{% url 'post_edit' pk=post.pk %}"><span class="glyphicon glyphicon-pencil"></span>Edit this Post</a>
<a class="btn btn-default" href="{% url 'comment_new' pk=comment.pk %}"><span class="glyphicon glyphicon-pencil"></span>Add Comment</a>
{% endif %}
</div>
{% endblock %}
{% block comment %}
<div class="comment">
<p>{{ comment.text|linebreaksbr }}</p>
{% if comment.published_date %}
<div class="date">
<a>Published at: {{ comment.published_date }}</a>
</div>
{% endif %}
{% if user.is_authenticated %}
<a class="btn btn-default" href="{% url 'comment_new' pk=comment.pk %}"><span class="glyphicon glyphicon-plus"></span>Add Comment</a>
{% endif %}
</div>
{% endblock %}
模型.py
#Post Model
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
#Comment(s) of Post Model
class Comment(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
post=models.ForeignKey(Post, on_delete=models.CASCADE)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
如果有人能给我一个很好的提示,我会很高兴的。谢谢,祝大家周末愉快:)
解决方案
以下不正确
{% url 'comment_new' pk=comment.pk %}
您的 url 模式url(r'^comment/new/$', views.comment_new, name='comment_new'),
显示没有pk
as 参数,因此您的 url 调用应该是
{% url 'comment_new' %}
在您的模板中:
<a class="btn btn-default" href="{% url 'comment_new' %}"><span class="glyphicon glyphicon-plus"></span>Add Comment</a>
推荐阅读
- python - 无法在通过 pygal 呈现的 html 生成的 pdf 上获取 pygal 图表
- windows - 无法连接到新创建的 Azure VM
- node.js - Node.js 可写流
- scala - 如何将位于根文件夹中的 jar 文件添加到 sbt 中的库依赖项
- bash - Web 应用程序健康检查
- php - CSS 路径在 gulp 和下划线之间没有对齐
- regex - 使用正则表达式在`helm helper template`中提取字符串
- azure - 无法连接到本地 Azure 存储帐户
- asp.net - 如何将模型从控制器传递到布局页面
- python - 如何将条件聚合应用于系列?