仅在所有者的帖子上显示编辑按钮 - Django



我有一个带有帖子和编辑帖子能力的Django项目。在主索引页上,我显示了所有的帖子,就像一个新闻源。目前任何人都可以编辑任何帖子,但我想让它,所以只有帖子的所有者可以编辑。我只是不确定如何编写url .py文件,因为我使用:

path("", views.index, name="index"),

我可能需要传递帖子id或用户名给这个,但我不确定如何写它。我试着:

path("index", views.index, name="index"), 
path("index/<str:pk>", views.index, name="index"),
path("index/<str:username>", views.index, name="index"),

但是我得到错误。

views.py

def index(request):
list_of_posts = Post.objects.all().order_by('id').reverse()
paginator = Paginator(list_of_posts, 10)
num = request.GET.get('page', 1)
get_page_num = paginator.get_page(num)
return render(request, "network/index.html", {
"list_of_posts": list_of_posts,
"get_page_num": get_page_num,
})

models.py

class User(AbstractUser):
pass
class Post(models.Model):
text = models.TextField(max_length=500, blank=True, 
null=True)
username = models.ForeignKey('User', 
on_delete=models.CASCADE, related_name='author', 
null=True, blank=True)
timestamp = models.DateTimeField(auto_now_add=True)      
like = models.ManyToManyField(
User,  blank=True, related_name="liked_user")
def __str__(self):
return self.username.username 

html显示编辑按钮。我试过:

{% if post.username == request.user.username %}
<button class="btn-btn primary" my-id="{{i.id}}" id="ebutton- 
{{i.id}}" onclick="edit_form(this)" >Edit</button>
<br><br><br> 
{% endif %}

本页完整html:

{% extends "network/layout.html" %}
{% load static %}
{% block body %}
<br>
<h3> <center> Welcome. Here is your news feed: </center> </h3>
<br>
{% for i in get_page_num %}
<div class='card mb-3' style="max-width: 530px;" id="card-posts">
<div class="row no-gutters">
<div class="col-md-8">
<div class="card-body">
<h5 class="card-title"><a href="{% url 'profile' 
username=i.username %}">{{i.username}}</a></h5>

<span id="textinfo-{{i.id}}" 
class="post">{{i.text}}</span> <br> 
<textarea my-id="{{i.id}}" id="edit-me-{{i.id}}" 
style="display:none;" class="form-control 
textarea" row="3">{{i.text}}</textarea>

<br>
<p class="card-text">{{i.timestamp}}</p>
<div class="like mt-1">
<img my-id="{{i.id}}" id="is-it-liked-{{i.id}}" 
class="like-class"

{% if not request.user in i.like.all %}

clicked="no" 
src="https://img.icons8.com/emoji/452/white-heart.png"

{%else%}

clicked="yes" 
src="https://img.icons8.com/emoji/452/red-heart.png"

{%endif%}
/> <span id="post-count-{{i.id}}">{{i.like.count}}. 
</span>
</div>
<br>
{% if request.user == post.username %}
<button class="btn-btn primary" my-id="{{i.id}}" 
id="ebutton-{{i.id}}" onclick="edit_form(this)" 
>Edit</button>
<br><br><br> 
{% endif %}
</div>
</div>
</div>
</div>
{% endfor %}
<br><br>
<div class="pagination">
<span class="step-links">
{% if get_page_num.has_previous %}  
<a href="?page={{ get_page_num.previous_page_number }}" 
class="page-link">Previous</a>
{% else %}

<li class="page-item disabled"><a class="page- 
link">Previous</a></li>
{% endif %}
{% if get_page_num.has_next %}
<a href="?page={{ get_page_num.next_page_number }}" class="page- 
link">Next</a>
{% else %}
<a class="page-link">Next</a>
{% endif %}
</span>
</div>
{% endblock %}

{% block script %} <script src="{% static 
'network/network.js'%}"></script> {% endblock %}

用这种方式,我需要传递用户名到url,但我不能,没有得到错误。总的来说,我只是在寻找建议,如何使编辑按钮只出现在当前用户是所有者的帖子上。这样就没有人可以编辑其他人的帖子了。

如果您想显示所有的帖子,并且只允许一个帖子作者编辑它,您需要在模板上下文中注入所有的帖子和请求用户。然后在模板中遍历这些帖子,在显示编辑按钮之前检查作者是否等于请求用户。但是首先你需要一个外键在你的post模型中指向作者。

urls . py

urlpatterns = [path("index/", views.index, name="index")]

def index(request):
list_of_posts = Post.objects.order_by('-id')
request_user = request.user
return render(request, "network/index.html", {
"list_of_posts": list_of_posts,
"request_user": request_user
})

class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.PROTECT, related_name='posts')
# Other fields

模板

{% if post.user == request_user %}
<!--Show the edit button-->
{% endif %}

你也可以在你的模板中直接访问请求对象:

{% if post.user == request.user %}
<!--Show the edit button-->
{% endif %}

我需要添加

{% if request.user == i.username %}

因为我在循环html页面,for i in get_page_num:。我之前没有I .

{% if request.user == post.author %}
<button>Delete</button>
{% endif %}

假设您有一个Post模型,其属性为author

相关内容

  • 没有找到相关文章

最新更新