Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-评论_Python_Django - Fatal编程技术网

Python Django-评论

Python Django-评论,python,django,Python,Django,我是Django的新手,我对评论表单有问题。我只想在特定帖子的页面上添加一个文本字段作为评论,但它是隐藏的。这是我在blogapp中的models.py文件: from django.db import models from django.utils import timezone from django.contrib.auth.models import User from django.urls import reverse class Post(models.Model):

我是Django的新手,我对评论表单有问题。我只想在特定帖子的页面上添加一个文本字段作为评论,但它是隐藏的。这是我在
blog
app中的
models.py
文件:

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse


class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)


    def __str__(self):
        return self.title

    
    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})


class Comment(models.Model):
    post = models.ForeignKey(Post, related_name='comments', on_delete=models.CASCADE)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)

    class Meta:
        ordering = ['date_posted']

    def __str__(self):
        return '{} - {}'.format(self.author, self.date_posted)
forms.py

from django import forms
from .models import Comment


class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ('content',)

views.py
文件:

from django.db import models
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.mixins import UserPassesTestMixin
from django.contrib.auth.models import User
from django.shortcuts import redirect, render
from django.shortcuts import get_object_or_404
from django.views.generic import ListView
from django.views.generic import DetailView 
from django.views.generic import CreateView
from django.views.generic import UpdateView
from django.views.generic import DeleteView
from .forms import CommentForm
from .models import Post
from .models import Comment


def home(request):
    context = {
        'title': 'Home',
        'posts': Post.objects.all()
    }
    return render(request, 'blog/home.html', context)


class PostListView(ListView):
    model = Post
    template_name = 'blog/home.html'
    context_object_name='posts'
    ordering = ['-date_posted']
    paginate_by = 7


class UserPostListView(ListView):
    model = Post
    template_name = 'blog/user_posts.html'
    context_object_name='posts'
    paginate_by = 7

    def get_queryset(self):
        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return Post.objects.filter(author=user).order_by('-date_posted')


def post_detail(request, slug):
    template_name = 'post_detail.html'
    post = get_object_or_404(Post, slug=slug)
    comments = post.comments.filter(active=True)
    new_comment = None
    if request.method == 'POST':
        comment_form = CommentForm(data=request.POST)
        if comment_form.is_valid():
            new_comment = comment_form.save(commit=False)
            new_comment.post = post
            new_comment.save()
    else:
        comment_form = CommentForm()

    return render(request, template_name, {'post': post,
                                           'comments': comments,
                                           'new_comment': new_comment,
                                           'form': comment_form})


class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title', 'content']

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)


class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Post
    fields = ['title', 'content']

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.author:
            return True
        return False



class PostDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Post
    success_url = '/'

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.author:
            return True
        return False


def about(request):
    return render(request, 'blog/about.html', {'title': 'About'})

最后是应该显示所有内容的
post_detail.html
模板:

{% extends 'blog/base.html' %}
{% load crispy_forms_tags %}

{% block content %}
    <article class="media content-section">
        <img class="rounded-circle article-img" src="{{ object.author.profile.image.url }}">
        <div class="media-body">
            <div class="article-metadata">
                <a class="mr-2" href="{% url 'user-posts' object.author.username %}">
                    {{ object.author }}
                </a>
                <small class="text-muted">{{ object.date_posted  | date:"F d, Y" }}</small>
                {% if object.author == user %}
                    <div>
                        <a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'post-update' object.id %}">Update</a>
                        <a class="btn btn-danger btn-sm mt-1 mb-1" href="{% url 'post-delete' object.id %}">Delete</a>
                    </div>
                {% endif %}
            </div>
            <h2 class="article-title">
                {{ object.title }}
            </h2>
            <p class="article-content">{{ object.content }}</p>
        </div>
    </article>
    <div>
        <strong><h2>Comments Section</h2></strong>
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Leave A Comment</legend>
                {{ form | crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Leave A Comment</button>
            </div>
        </form>
        <ul>
            {% for comment in object.comments.all %}
                <div>
                    <img class="rounded-circle article-img" src="{{ post.author.profile.image.url }}">
                    {{ comment.author }} - {{ comment.date_posted  | date:"F d, Y" }}
                    <br>
                    {{ comment.content }}
                </div>
            {% endfor %}
            </ul>
    </div>
{% endblock content %}
{%extends'blog/base.html%}
{%load crispy_forms_tags%}
{%block content%}
{{object.date_posted}日期:“fd,Y”}
{%if object.author==user%}
{%endif%}
{{object.title}}

{{{object.content}

评论部分 {%csrf_令牌%} 留言 {{form | crispy}} 留言
    {%用于object.comments.all%中的注释} {{comment.author}}-{comment.date_posted|date:“fd,Y”}
    {{comment.content} {%endfor%}
{%endblock内容%}


我被这个问题困住了。非常感谢您的建议。

您有两个帖子详细视图。。。你用哪一个来渲染模板我也注意到了。比如说,我将使用一个基于函数的函数,我还编辑了上面的代码