我正在创建一个博客站点,用户可以在主页上发布文章,然后也可以使用表单对其进行评论。这些帖子也可以在网站的其他地方查看,例如在搜索结果和用户配置文件中。我想做的是允许用户在帖子出现的任何地方发表评论。为此,我在评论表单中使用了包含标签,如下所示:
@register.inclusion_tag('posts/comment.html')
def comment_create_and_list_view(request):
profile = Profile.objects.get(user=request.user)
c_form = CommentModelForm()
if 'submit_c_form' in request.POST:
c_form = CommentModelForm(request.POST)
if c_form.is_valid():
instance = c_form.save(commit=False)
instance.user = profile
instance.post = Post.objects.get(id=request.POST.get('post_id'))
instance.save()
c_form = CommentModelForm()
context = {
'profile': profile,
'c_form': c_form,
}
return context
并像这样注册到我的网址:
from django.urls import path
from .templatetags.custom_tags import comment_create_and_list_view
from .views import *
app_name = 'posts'
urlpatterns = [
path('comment/<int:pk>/', comment_create_and_list_view, name='comment'),
]
我的表格如下所示:
class CommentModelForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('body',)
comment.html 看起来像这样:
<form action="{% url 'posts:comment' post.id %}" method="post">
{% csrf_token %}
<input type="hidden" name="post_id" value={{ post.id }}>
{{ c_form }}
<button type="submit" name="submit_c_form">Send</button>
</form>
我正在使用将包含标记导入我的 base.html 文件{% comment_create_and_list_view request %}
在尝试加载页面时,我在 / 错误处收到 NoReverseMatch:
Reverse for 'comment' with arguments '('',)' not found. 1 pattern(s) tried: ['comment/(?P<pk>[0-9]+)/$']
谷歌搜索了几个小时,无法理解我哪里出错了......