0

Ich bin neu in Python und Django und jetzt ein Blog zu entwickeln. Ich habe dieses Modell, dass Benutzer auf der Website anmelden und ihre Beiträge und alle Beiträge hinzufügen können zu Hause angezeigt. Gleichzeitig möchte ich, dass die Beiträge des Benutzers im Benutzerprofil angezeigt werden.Django Benutzer Beiträge aus allen Posts gefiltert und im Benutzerprofil angezeigt werden

Mein Modell für den Blogpost ist

from django.db import models 
from django.utils import timezone 

class Blogpost(models.Model): 
    author = models.ForeignKey('auth.User') 
    title = models.CharField(max_length=200) 
    text = models.TextField() 
    created_date = models.DateTimeField(default=timezone.now) 
    published_date = models.DateTimeField(blank=True, null=True) 

def publish(self): 
    self.published_date = timezone.now() 
    self.save() 

def __str__(self): 
    return self.title 

und die views.py:

views.py  

from django.contrib.auth.decorators import login_required 
from django.shortcuts import render 
from blogpost.models import Blogpost 

def home(request): 
    context = {} 
    template = 'home.html' 
    return render(request,template,context) 

def about(request): 
    context = {} 
    template = 'about.html' 
    return render(request,template,context) 

@login_required(login_url='/accounts/login/') 
def userprofile(request): 
    user = request.user 
    context = {'user': user} 
    user_posts=Blogpost.objects.filter(author=request.user).order_by('-published_date') 
    template = 'profile.html' 
    return render(request,template,context,{'user_posts':user_posts}) 

ich diese Vorlage verwenden die Beiträge der Benutzer von der Abfrage zurückgegeben anzuzeigen.

profile.html 

{% extends 'base.html' %} 
{% load staticfiles %} 

{% block blogprofile %} 

     {{ user.username }} 
     {{ user.email }} 

    {% for Blogpost in user_posts %} 
      <div class="post"> 

       <div class="date"> 
        <p>{{ Blogpost.published_date }}</p> 
        <p>{{ Blogpost.author }}</p> 
       </div> 

       <h1><a href="{% url 'post_detail' pk=Blogpost.pk %}">{{ Blogpost.title }}</a></h1> 
       <p>{{ Blogpost.text|linebreaksbr }}</p> 

      </div> 
    {% endfor %} 

{% endblock %} 

Jetzt bekomme ich nur Benutzername und E-Mail, wenn ich das Profil.html öffne, wo der Beitrag nicht abgerufen wird. Kann mir bitte jemand korrigieren, wo ich Fehler mache.

+0

Freundlich Tipp: da Sie Python neu sind, ein paar Minuten in Anspruch nehmen zu lesen [pep 8] (https://www.python.org/dev/ peps/pep-0008 /). – Melvyn

Antwort

1

Um dies ändern Ihre Ansicht:

@login_required(login_url='/accounts/login/') 
def userprofile(request): 
    user = request.user 
    user_posts = Blogpost.objects.filter(author=request.user).order_by('-published_date') 
    template = 'profile.html' 
    return render(request, template, {'user_posts':user_posts,'user': user}) 
+0

Danke Diese Ansicht funktioniert. Können Sie mir bitte erklären, warum mein Code nicht funktioniert hat? Ich benutzte auch context = {'user': user} return render (Anfrage, Vorlage, Kontext, {'user_posts': user_posts}) – Faz

+1

Sie haben 2 Wörterbücher im Render übergeben, das funktioniert nicht, Sie müssen alles reingeben ein Wörterbuch, dein Kontext war ein Wörterbuch und eins, das du im Rendering passierst, also nahm django das erste und das ist der Benutzer ein – Exprator

+0

Vielen Dank .. Ich habe einen ganzen Tag auf diesem verbracht :-) – Faz

Verwandte Themen