一个Django世界的新手。我似乎有一个普遍的问题,但我在网上找不到一个好的答案。我需要通过一个django queryset到模板显示一个列表。在这些Article对象中,有些可能是由用户编写的,我想突出显示/标记这些特定的文章。实现这一目标的最佳实践/解决方案是什么?
例如:
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 %}
问题:是否有一个好方法来注释'article_list'对象与标志some_flag标记'my_articles'在views.py?
或者有一种方法可以通过传递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模型以进一步简化。