Django 如何将查询集中的用户特定对象标记为发送到模板?
Django how to mark user-specific objects in queryset to be sent to template?
Django 世界的新手。我有一个似乎是普遍性的问题,但我找不到关于 Internet.I 需要将 django 查询集传递给模板以显示列表的好的答案。在那些文章对象中,有些可能是用户写的,我想 highlight/star 那些特定的文章。什么是最好的 practice/solution 来实现这一点?
例如:
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)
在模板中我想显示所有文章的列表,但是'star'只有当前登录用户写的文章
所以在我的模板中我想做这样的事情:
{% 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 %}
。但我建议在开发时更改 Article 模型以进一步简化。
Django 世界的新手。我有一个似乎是普遍性的问题,但我找不到关于 Internet.I 需要将 django 查询集传递给模板以显示列表的好的答案。在那些文章对象中,有些可能是用户写的,我想 highlight/star 那些特定的文章。什么是最好的 practice/solution 来实现这一点?
例如:
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)
在模板中我想显示所有文章的列表,但是'star'只有当前登录用户写的文章
所以在我的模板中我想做这样的事情:
{% 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 %}
。但我建议在开发时更改 Article 模型以进一步简化。