我对python / Django很新,我现在想要实现我的每个博文都可以发表评论。 但我没有得到诀窍。 我创建的所有内容都与我的帖子模型预期的一样。
Exception Type: NoReverseMatch
Exception Value: Reverse for 'comment_new' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['comment/new/$']
urls.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'),
]
views.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 %}
models.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
如果有人能给我一个好的提示,我会很开心的。 谢谢你们周末愉快!)
答案 0 :(得分:0)
以下内容不正确
{% url 'comment_new' pk=comment.pk %}
您的网址格式url(r'^comment/new/$', views.comment_new, name='comment_new'),
显示没有pk
作为参数,因此您的网址调用应为
{% url 'comment_new' %}
在你的模板中:
<a class="btn btn-default" href="{% url 'comment_new' %}"><span class="glyphicon glyphicon-plus"></span>Add Comment</a>