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 »</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 »</a> {% endif %} </div> </div> {% endblock content %}
3 Réponses :
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 = [] ...
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.
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) ...