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!!
Un peu de code pour agrémenter :
Classe Post :
Classe ImageLibrary :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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])
La View de Post :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Le template de post (l'index) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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})
Je veux en fait ne pas afficher l'id de l'imagemais son URL ({{ MEDIA_URL }}{{ post.image }})
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 suis aussi preneur de conseils !
Merci
Partager