1
votes

Comment puis-je afficher le message sur la page d'accueil de Django en fonction du propriétaire du message

Je crée un site Web de blogueur, chaque utilisateur a son propre message que l'autre ne peut pas voir. Je veux montrer le dernier message de l'utilisateur sur la page d'accueil (index.html).

ce que j'ai essayé, c'est que si l'utilisateur avait déjà un message, cela fonctionne bien, mais si l'utilisateur n'a pas encore de message, lorsqu'il accède à la page d'accueil, il affiche le dernier message de l'autre utilisateur. comment l'empêcher? ce que je veux, c'est que si l'utilisateur n'a pas encore de message, la page d'accueil affiche un texte indiquant à l'utilisateur qu'il n'a pas encore de message.

voici mon code

index.html

def index(request):
    """The Home Page"""
    post = BlogPost.objects.all()
    post_title = post.last()
    texts = post_title.text
    context = {'post_title': post_title, 'texts': texts}
    return render(request, 'blogs/index.html', context)

views.py

{% extends "blogs/base.html" %}
{% block content %}
<div class="container jumbotron p-3 p-md-5 text-white rounded bg-dark">
  <div class="col-md-6 px-0">
    {% if user.is_authenticated %}
    <h1 class="display-4 font-italic">{{ post_title }}</h1>
    <p class="lead my-3">{{texts|truncatewords:20}}</p>
    <p class="lead mb-0"><a href="#" class="text-white font-weight-bold">Continue reading...</a></p>
    <small><a href="{% url 'blogs:posts' %}" class="text-white ">See all your posts &raquo;</a></small>
    {%else%}
    <h1 class="display-4 font-italic">Welcome To Bogger</h1>
    <p class="lead my-3">This site is used to post your daily stories without having to worry about other people reading them.</p>
    <a class="btn-lg btn-primary" href="{% url 'users:register' %}" role="button">Register &raquo;</a>
    {% endif %}
  </div>
</div>
{% endblock content %}


0 commentaires

3 Réponses :


0
votes

Faites ceci à la place:

def index(request):

    ...

    # query for just the logger in user's posts:
    if request.user.is_authenticated: 
        posts = request.user.posts.all() 
    
    else: 
        posts = []

    ...


0 commentaires

0
votes

Pour autant que je sache, vous voulez montrer à l'utilisateur son propre message, mais dans la vue de la page d'accueil, vous leur montrez simplement le dernier message créé, quel que soit l'utilisateur, il verra le dernier message, vous avez besoin d'une relation de base de données, dans ce cas un à plusieurs (un utilisateur a plusieurs messages)

donc dans le modèle de post, vous devez ajouter quelque chose comme:

 if request.user.is_authenticated:
     post=Post.objects.filter(user__pk=request.user.id).last()
     # return template with post
 else:
    # for user not authenticated

et à votre avis:

from django.contrib.auth.models import User
class Post(models.Model):
    ...
    user = models.ForeignKey(User, on_delete=models.CASCADE)

Je pense que c'est ce que tu voulais.


0 commentaires

0
votes

En supposant que votre BlogPost modèle a ForeignKey

def index(request):
    """The Home Page"""
    if request.user.is_authenticated: 
        posts = BlogPost.objects.all().filter(user__pk=request.user.id).last()
        # TO DO: What do want to pass on to the template
    else:
        posts = []
        # TO DO: Handle when posts is empty 
    # TO DO: Return to template

    ...

Modifiez maintenant votre fonction d' index un peu comme ceci

from django.contrib.auth.models import User


class BlogPost(models.Model):
    ...

    user = models.ForeignKey(User, on_delete=models.CASCADE)
    ...


0 commentaires