将后端数据传输到前端时遇到问题(Django)

时间:2019-07-15 09:15:52

标签: django django-models django-views

我正在创建一个博客,其中需要一个评论部分(第一个项目,进入Python / Django 3周)。到目前为止,我已经创建了2个模型(Blog是主要的模型,Comment是与Blog的外键链接的模型),但是由于某种原因,我找不到合适的方法来将Comment模型中的信息显示到我的模型中HTML部分。

我尝试过使用字典,多次重写了模型和视图(由于发现了不同的youtube视频),但是似乎没有任何正常工作。

这些是我的模特:

class Blog(models.Model):
    title = models.CharField('Blog\'s title', max_length=100, blank=False)
    slug = models.SlugField('Enter your blog\'s url', blank=False)
    date = models.DateTimeField('Date and time on publication', 
    blank=False)
    content = models.TextField(blank=False)
    thumb = models.ImageField(blank=True, null=True, 
    default='default_blog_icon.jpg')

    def __str__(self):
        return self.title

    def snippet(self):
        return self.content[:50] + ' ' +'...'

class Comment(models.Model):
    post = models.ForeignKey(Blog, on_delete=models.CASCADE, 
    related_name='comments')
    user = models.CharField(max_length=200)
    body = models.TextField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)
    approved = models.BooleanField(default=False)

    def approved(self):
        self.approved = True
        self.save()

    def __str__(self):
        return self.user

意见:

def index(request):
    blogs = Blog.objects.all().order_by('-date')
    comments = Comment.objects.all()
    args = {'blogs': blogs, 'comments': comments}    
    return render(request, "blog/index.html", args)

def blog_details(request, slug):
    slug_url = Blog.objects.get(slug=slug)
    return render(request, 'blog/blog_details.html', {'blog_info': slug_url})

还有HTML:

    {% for blog in blogs %}
        <div class="bloggy">
            <h3><a href="{% url 'blog_details' slug=blog.slug %}">{{ 
blog.title }}</a></h3>
            <img src ="/media/{{ blog.thumb }}">
            <p>{{ blog.snippet }}</p>
            <p>Posted on {{ blog.date }}</p>
            <p>{{ comments }}</p>
            <p>{{ Comments.Blog.get_user }}</p>
            <p>{{ comment.user }}</p>
            <p>{{ comment.created }}</p>
            <p>{{ comment.approved }}</p>
        </div>
    {% endfor %}

到目前为止,我唯一能获得的前端就是{{ comments }},它为我提供了我设置的用户名。除此之外,什么都没有显示。

我需要以某种方式显示用户名,评论正文(内容本身)和日期。

任何帮助,反馈或指导将不胜感激。

欢呼

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式访问每个博客的评论:

在您的views.py中:

def index(request):
    blogs = Blog.objects.all().prefetch_related('comments').order_by('-date')
    args = {'blogs': blogs}    
    return render(request, "blog/index.html", args)

然后在模板中,您可以将HTML更改为此:

{% for blog in blogs %}
    <div class="bloggy">
        <h3><a href="{% url 'blog_details' slug=blog.slug %}">{{blog.title}}</a></h3>
        <img src ="/media/{{ blog.thumb }}">
        <p>{{ blog.snippet }}</p>
        <p>Posted on {{ blog.date }}</p>
        {% for comment in blog.comments.all %}
            <p>{{ comment.blog.get_user }}</p>
            <p>{{ comment.user }}</p>
            <p>{{ comment.created }}</p>
            <p>{{ comment.approved }}</p>
        {% endfor %}
    </div>
{% endfor %}