django - 在django模板中显示查询集对象

标签 django

我有一个型号Post我正在尝试将所有帖子显示到模板上。我将 post.html 包含到 home.html 中...... 我发现了与我的问题类似的问题,但对象仍然没有显示link

我首先尝试使用 python manage.py shell 来创建对象。所以首先我这样做了。 Post.objects.all() <QuerySet [<Post: test>, <Post: admin>]>

然后我尝试创建一个新帖子。 Post.objects.create(user="test", content="New comment") 但得到这个错误: ValueError: Cannot assign "'test'": "Post.user" must be a "User" instance.

尝试排查问题,但未能解决。所以我决定将代码写在 posts/views.py 中,但效果并不好。我认为这是我的问题的根源,为什么对象没有显示在模板中。

这是我的 posts/posts.views


def posts_list(request):
    # if request.user.is_authenticated():
    queryset = Post.objects.all()
    context = {
        "object_list": queryset,
        "user": "username"
    }
    return render(request, "posts.html", context)

这是我的 templates/post.html

<!DOCTYPE html>
<html lang="en">
  <body>
    <h1>What's on your mind, {{ user }}</h1>
    { % for obj in object_list %}
    {{obj.user}}<br/>
    {{obj.content}}<br/>
    {{obj.timestamp}}<br/>
    {% endfor %}

  </body>
</html>

最佳答案

您在这里问了两个问题。我将在下面回答这两个问题:

显示您的帖子

首先,您需要确保将用户对象传递给模板。假设用户信息存储在request.user中,您可以这样做:

views.py:

def posts_list(request):

    if request.user.is_authenticated:

        user = request.user
        queryset = Post.objects.all()

        context = {
            "object_list": queryset,
            "user": user
        }

        return render(request, "home.html", context)

home.html:

<html>
<h1>Homepage</h1>
{% if user.is_authenticated %}
<h1>What's on your mind, {{ user }}</h1>
    { % for obj in object_list %}
    {{obj.user}}<br/>
    {{obj.content}}<br/>
    {{obj.timestamp}}<br/>
    {% endfor %}
<a href="{% url 'logout' %}">Logout</a>
{% endif %}
</html>

为用户添加帖子

您需要获取一个用户对象来传递给您的创建方法,而不是使用字符串“test”。您的尝试失败的原因是您向函数传递了一个字符串(“test”),而函数需要一个用户对象。

此行获取一个用户(任意获取列表中的第一个用户):

u = User.objects.all()[0]

此行导入 datetime 模块,您需要使用该模块为 create 方法生成日期和日期时间对象:

import datetime

这一行为该用户创建一个帖子:

Post.objects.create(user=u, content="New comment", publish=datetime.date.today(), updated=datetime.datetime.now(), timestamp=datetime.datetime.now())

关于django - 在django模板中显示查询集对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54735780/

相关文章:

python - 如何修复 'TypeError: __init__() got an unexpected keyword argument ' 发件人”

python - Django 2 命名空间和 app_name

Django 管理 ListView 在自定义列中显示外部 url 数据

python - Django Rest 框架 : request. Post 与 request.data?

python - Django get_or_create 抛出完整性错误

使用 django-nose 的 Django 负载测试装置

python - DetailView 方法的参数和 pk_url_kwarg 的用法

python - Django - 将 HTML 输出转换为变量

python - 模型表单中 ChoiceField 的小部件

python - gunicorn 状态处于事件状态(已退出)但显示未在 monit 中运行