django - Django如何在查询集中标记用户特定的对象以发送到模板?
问题描述
Django 世界的新手。我有一个看似普遍的问题,但在 Internet 上找不到好的答案。我需要将 django 查询集传递给模板以显示列表。在这些文章对象中,有些可能是用户编写的,我想突出显示/加注这些特定文章。实现这一目标的最佳实践/解决方案是什么?
例如:
class Article(models.Model) :
article_text = models.CharField(max=32)
written_by = models.CharField()
所以我可以访问views.py中所有文章的列表:
article_list = Articles.objects.all()
我可以按我当前登录的用户过滤所有文章
my_article = article_list.filter(written_by=current_user)
在模板中,我想显示所有文章的列表,但“星标”仅显示当前登录用户编写的文章
所以在我的模板中我想做这样的事情:
{% for article in article_list %}
{% if article.some_flag %}
Starred Article
{% endif %}
{% endfor %}
问题:有没有一种好方法可以用在views.py 中标记“my_articles”的标志some_flag 来注释“article_list”对象?
或者有没有办法通过同时传递 article_list 和 mylist 并在模板代码中进行查找来在模板中执行此操作?类似的东西(仅用于说明的代码):
{% for article in article_list %}
{% if article.pk in mylist.keys %}
Starred Article {{ mylist.pk }}
{% endif %}
{% endfor %}
任何指针都会非常有帮助。希望问题很清楚。
解决方案
首先将您的文章模型更改为:
from django.conf import settings
class Article(models.Model) :
article_text = models.CharField(max=32)
written_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
接下来在您的模板中检查用户是否与请求的用户相同:
{% for article in article_list %}
{% if article.written_by == request.user %}
Starred Article
{% endif %}
{% endfor %}
看起来你有一些current_user
(不知道这个变量是什么,也许是用户名?)你用来匹配用户,如果你真的不想改变你的模型,你可以将它传递到上下文中并写{% if article.written_by == current_user %}
。但我建议在开发时更改文章模型以进一步简化。
推荐阅读
- c++ - 如何在子项目中忽略 CMake 编译器定义
- sql-server - 按“最右边”节点搜索hierarchyid
- javascript - JavaScript 按钮到消散按钮
- c# - C# Excel 读取多维数组
- jquery - 使用 Jquery 将 css 应用于除一个元素之外的所有元素
- excel - Excel - VLOOKUP 问题
- html - 在调整大小时让每个项目都位于完全相同的位置
- terminal - 如何使用节点从本地机器访问服务器端终端
- uwp - 为什么我在 Xbox One 上没有收到非英语虚拟键盘的 CharacterReceived 事件
- spring - entitymanager.persist 不插入数据库