2017-10-20 9 views
0

Ceci est mon models.pyerreur en montrant le lien de profil d'utilisateur dans la page d'accueil dans Django

class Post(models.Model): 
    topic = models.CharField(max_length=200) 
    description = models.TextField() 
    created_by = models.ForeignKey(User, related_name='posts') 
    created_on = models.DateTimeField() 

class Comment(models.Model): 
    commented_by = models.ForeignKey(User, related_name='comments') 
    commented_on = models.ForeignKey(Post, related_name='comments') 
    commented_text = models.CharField(max_length=500) 
    commented_time = models.DateTimeField(auto_now_add=True) 

class Blogger(models.Model): 
    username = models.OneToOneField(User, related_name='bloggers') 
    blogger_bio = models.CharField(max_length=1000) 

URL.py pour nom d'utilisateur

url(r'^(?P<username>[a-zA-Z0-9]+)/$', views.author_desc, name='author_desc'), 

Views.py

from django.shortcuts import render, get_object_or_404 
from .models import Post, User, Comment, Blogger 
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 

def home(request):  
    posts_list = Post.objects.all() 
    return render(request, 'home.html', {'posts': posts}) 

et mon home.html où je veux afficher:

<!DOCTYPE html> 
<html> 
<head> 
    <title>HOME</title> 
</head> 

<body> 

<h2>All Blogs</h2> 

{% for post in posts %} 
    <a href="{% url 'post_desc' pk=post.pk %}"><b>Post Topic: </b>{{ post.topic }}</br></a> 
     <b>Published Time: </b>{{ post.created_on }}</br> 
     <b>Author: </b><a href="{% url 'author_desc' blogger.username %}">{{ post.created_by }}</a></br></br> 
{% endfor %} 

</body> 

</html> 

Je veux montrer la page de chaque blogueur à partir d'un lien de la maison. Mais ça devient un problème.

Qu'est-ce que je fais mal ici?

+0

Quelle est l'erreur que vous voyez? –

+0

@SandeepBalagopal NoReverseMatch at/ Inverser pour 'author_desc' avec les arguments '(' ',)' non trouvé. 1 modèle (s) essayé (s): ['(? P [a-zA-Z0-9] +)/$'] –

Répondre

0

Vérifiez si le paramètre blogger.username est vide.

En fait, les modèles ne sont pas très beaux. Le ForeignKey dans le modèle de poste doit être au modèle Blogger.

class Post(models.Model): 
    created_by = models.ForeignKey(Blogger, related_name='posts') 

Ensuite, dans le modèle que vous pouvez faire

{% for post in posts %} 
<a href="{% url 'post_desc' pk=post.pk %}"><b>Post Topic: </b>{{ post.topic }}</br></a> 
    <b>Published Time: </b>{{ post.created_on }}</br> 
    <b>Author: </b><a href="{% url 'author_desc' post.created_by.user.username %}">{{ post.created_by.user }}</a></br></br>{% endfor %} 
+0

En fait, j'avais un problème à chaque fois que je créais un profil utilisateur, il ne s'ajoutait pas automatiquement à blogger . Donc, pour résoudre cela, j'ai utilisé les signaux django (post_save) pour créer un signal entre eux. Donc, que chaque fois que je crée un nouveau profil, il crée aussi automatiquement le profil de blogueur pour cela. Alors, dois-je changer cela pour que les signaux soient OK? –

+0

Si vous avez un modèle Profile suffisant, vous n'avez pas besoin d'un modèle Blogger supplémentaire. Ajoutez le champ blogger_bio à votre modèle de profil. Ensuite, dans votre modèle Post, donnez ForeignKey au profil. C'est mieux. –

+0

Il n'y a pas de modèle de profil. J'ai juste des modèles Post, Comment, Blogger et User. –

0

Essayez cette

{% for post in posts %} 
<a href="{% url 'post_desc' pk=post.pk %}"><b>Post Topic: </b>{{ post.topic }}</br></a> 
    <b>Published Time: </b>{{ post.created_on }}</br> 
    <b>Author: </b><a href="{% url 'author_desc' post.created_by.username %}">{{ post.created_by }}</a></br></br> 
{% endfor %} 
+0

Dans views.py, j'ai ajouté, blogger_list = Blogger.objects.all() et enfin 'rendre le rendu (request,' home.html ', {' posts ': posts,' blogger_list ': blogger_list})' et modèle 'blogger_list.username'. Ne fonctionne toujours pas. –

+0

Avez-vous l'intention de montrer tout le lien des blogueurs de la page d'accueil? Si oui, vous devrez utiliser une boucle dans le modèle pour montrer le lien de chaque blogueur. Et 'bloggers_list' est une liste de blogueurs, alors que 'blogger_object' est censé être un seul blogueur – rajkris

+0

Comment utiliser une boucle for dans {% url%} ?? –