我有一个型号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/