在 Django 模板中获取用户信息并检查它是不是等于作者的名字
Posted
技术标签:
【中文标题】在 Django 模板中获取用户信息并检查它是不是等于作者的名字【英文标题】:Get user information in Django templates and and checking whether it's equal to author's name在 Django 模板中获取用户信息并检查它是否等于作者的名字 【发布时间】:2020-07-28 16:07:02 【问题描述】:我无法查询用户名,也无法与作者进行比较。 它适用于下面发布的一个案例。
% if user.is_authenticated %
% if user.get_username == blog.author %
<a href="% url 'update' pk=blog.pk %"><i class="fas fa-pen fa-2x fa-spin"></i></a>
% endif %
% if user.is_superuser %
<a href="% url 'update' pk=blog.pk %"><i class="fas fa-pen fa-2x fa-spin"></i></a>/
<a href="% url 'delete' pk=blog.pk %"><i class="fas fa-trash-alt fa-2x fa-spin"></i></a>
% endif %
% endif %
我的看法
@login_required(login_url='login')
def update_post(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == 'POST':
form = EditPost(request.POST, request.FILES, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.last_edited = timezone.now()
post.save()
return redirect('blog', pk=post.pk)
else:
form = EditPost(instance=post)
context = 'form': form
return render(request, 'blog/edit_post.html', context)
我的模特
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200, null=True)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
pub_date = models.DateTimeField(blank=True, null=True)
last_edited = models.DateTimeField(null=True, blank=True)
def __str__(self):
return f'self.title by author self.author'
但它适用于
% for comment in blog.comments.all %
<cite> comment.author </cite>
<time class="comment__time"> comment.created_date </time>
% if user.is_authenticated and request.user.username == comment.author %
<a class="reply" href="% url 'remove' pk=comment.pk %">remove</a>
% endif %
<div class="comment__text">
<p> comment.comment </p>
% endfor %
对于这个模型是
class Comment(models.Model):
post = models.ForeignKey('blog.Post', on_delete=models.CASCADE, related_name='comments')
author = models.CharField(max_length=50, null=True)
comment = models.TextField()....
def __str__(self):
return f'self.comment by user self.author'
【问题讨论】:
Under what circumstances may I add "urgent" or other similar phrases to my question, in order to obtain faster answers? 【参考方案1】:最后我想出了解决办法。它会像
% if user.is_authenticated and if request.user == blog.author or if user.is_superuser %
<a href="% url 'update' pk=blog.pk %"><i class="fas fa-pen fa-2x fa-spin"></i></a>
<a href="% url 'delete' pk=blog.pk %"><i class="fas fa-trash-alt fa-2x fa-spin"></i></a>
% endif %
而不是
% if user.get_username == blog.author %
<a href="% url 'update' pk=blog.pk %"><i class="fas fa-pen fa-2x fa-spin"></i></a>
% endif %
% if user.is_superuser %
<a href="% url 'update' pk=blog.pk %"><i class="fas fa-pen fa-2x fa-spin"></i></a>/
<a href="% url 'delete' pk=blog.pk %"><i class="fas fa-trash-alt fa-2x fa-spin"></i></a>
% endif %
% endif %
【讨论】:
【参考方案2】:-
尝试打印输出
request.__dict__
以查看其中的所有数据,以及check
上下文中的内容。
什么是错误消息,有吗?
【讨论】:
我应该在视图 func() 中打印它吗??以上是关于在 Django 模板中获取用户信息并检查它是不是等于作者的名字的主要内容,如果未能解决你的问题,请参考以下文章
Django 模板 - 检查字段中是不是有值,如果 ManyToManyField 则为空