Django, foreign key dans template
Bonjour,
Je débute avec Django et tente de comprendre ses rouages...
Je tente de faire un simple blog pour m’entraîner où les articles (classe Post) sont reliés par une foreign key (OneToOne) à une classe ImageLibrary. Le but et de faire à la manière de wordpress avec son image à la une qu'on peut mettre sur les articles.
Le problème est que dans mon template, je ne sais pas comment afficher les champs de ma classe ImageLibrary :cry: !!
Un peu de code pour agrémenter :
Classe Post :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| # -*- coding: utf-8 -*-
from django.db import models
from django.core.urlresolvers import reverse
from tinymce.models import HTMLField # Bibliothèque django-tinymce
from blog.models.library import ImageLibrary
class Post(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(unique=True, max_length=255)
description = models.TextField()
image = models.OneToOneField(ImageLibrary)
content = HTMLField()
published = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now_add=True)
class Meta:
app_label = "blog"
ordering = ['-created']
def __unicode__(self):
return u'%s' % self.title
def get_absolute_url(self):
return reverse('blog.views.posts.view', args=[self.slug]) |
Classe ImageLibrary :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # -*- coding: utf-8 -*-
from django.db import models
class ImageLibrary(models.Model):
title = models.CharField(max_length=255)
alternative = models.CharField(max_length=255)
image = models.ImageField(upload_to="images/")
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now_add=True)
class Meta:
app_label = "blog"
ordering = ['-created']
def __unicode__(self):
return u'%s' % self.title |
La View de Post :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| # -*- coding: utf-8 -*-
from django.shortcuts import render, get_object_or_404
from blog.models import Post
def index(request):
posts = Post.objects.filter(published=True)
return render(request, 'posts/index.html', {'posts': posts})
def view(request, slug):
posts = Post.objects.all()
post = get_object_or_404(Post, slug=slug)
return render(request, 'posts/post.html', {'post': post, 'posts': posts}) |
Le template de post (l'index) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| {% extends 'base.html' %}
{% block content %}
<div class="row">
{% for post in posts %}
<div class="span4">
<p><a href="{{post.get_absolute_url}}"><img src="{{ MEDIA_URL }}{{ post.image }}"/></a></p>
<h2><a href="{{post.get_absolute_url}}">{{post.title}}</a></h2>
<p>{{post.description}}</p>
</div>
{% endfor %}
</div>
{% endblock %} |
Je veux en fait ne pas afficher l'id de l'imagemais son URL ({{ MEDIA_URL }}{{ post.image }})
Je suis aussi preneur de conseils !
Merci