【问题标题】:Having issues with getting my back-end data to the front-end (Django)将我的后端数据传输到前端(Django)时遇到问题
【发布时间】:2019-07-15 09:15:52
【问题描述】:

我正在创建一个需要评论部分的博客(第一个项目,Python/Django 3 周)。到目前为止,我已经创建了 2 个模型(博客是主要的,评论与博客的外键链接)但由于某种原因,我找不到将评论模型中的信息显示到我的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 }},它为我提供了我设置的用户名。除此之外没有其他任何显示。

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

我们将不胜感激任何帮助、反馈或指导。

干杯

【问题讨论】:

  • 您真的想要索引页面上每个博客的所有 cmets 吗?
  • 不,但是一旦我发现要显示数据,我就会将它们放在另一个页面中。问题是如何将数据从后端获取到前端。

标签: django django-models django-views


【解决方案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 %}

【讨论】:

  • 现在,如果我想获取该信息并将其显示在另一个页面上,最好的方法是什么?我应该创建一个新函数: def blog_cmets(request): cmets_data = Blog.objects.all().prefetch_related('cmets') args_two = {'cmets_data': cmets_data} return render(request, 'blog/blog_details.html' , {'cmets': args_two}) 和另一个循环或?
  • 如果您想创建一个包含类似内容的新页面,我建议为该 URL 创建一个新视图。如果您是 Django 新手,可以尝试 Django's poll app。如果你想将一些数据从一个模板发送到另一个模板,那么你应该看看this
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2020-10-29
  • 1970-01-01
  • 2020-07-20
相关资源
最近更新 更多