Форум сайта python.su
Здравствуйте!
Начал изучать Django, рассматриваю классический пример с бложиком.
Модель:
class BlogPost(models.Model): title=models.CharField(max_length=150) body=models.TextField() timestamp=models.DateTimeField() class Meta: ordering=('-timestamp',) class BlogPostAdmin(admin.ModelAdmin): list_display=('title', 'timestamp')
{% extends "main.html" %} {% load staticfiles %} {% block newsblog %} {% for post in posts1 %} <h2>{{post.title}}</h2> <p>{{post.timestamp}}</p> <p>{{post.body}}</p> {% endfor %} {% endblock %}
Офлайн
Посмотрите более полный пример, например этот:
http://www.djangorocks.com/tutorials/how-to-create-a-basic-blog-in-django/defining-your-models.html
Офлайн
Спасибо! Полезный был пример, но надо двигаться дальше.
Сейчас стоит задача разместить на странице две последние новости из категории 1, и две из категории 2.
model.py
class Blog(models.Model): title = models.CharField(max_length=100, unique=True) slug = models.SlugField(max_length=100, unique=True) description=models.TextField(max_length=300) body = models.TextField() timestamp=models.DateTimeField(db_index=True) category = models.ForeignKey('auto.Category') hot = models.BooleanField(default=False) class Meta: ordering=('-timestamp',) def __unicode__(self): return '%s' % self.title @permalink def get_absolute_url(self): return ('view_blog_post', None, { 'slug': self.slug }) class Category(models.Model): title = models.CharField(max_length=100, db_index=True) slug = models.SlugField(max_length=100, db_index=True) def __unicode__(self): return '%s' % self.title @permalink def get_absolute_url(self): return ('view_blog_category', None, { 'slug': self.slug })
def view_category(request, slug): category = get_object_or_404(Category, slug=slug) return render_to_response('home.html', { 'category': category, 'posts': Blog.objects.filter(category=category) }) def view_post(request, slug): return render_to_response('post.html', { 'post': get_object_or_404(Blog, slug=slug) })
url(r'^news/(?P<slug>[^\.]+).html', view_post, name='view_blog_post'), url(r'^(?P<slug>[^\.]+).html', view_category, name='view_blog_category'),
Офлайн
def view_category(request, slug): category = get_object_or_404(Category, slug=slug) return render_to_response('home.html', { 'category': category, 'posts': Blog.objects.filter(category=category) })
def view_category(request, slug): category = get_object_or_404(Category, slug=slug) return render_to_response('home.html', { 'category': category, 'posts': Blog.objects.filter(category=category), # вот тут например сделайте выборкуи передайте })
Отредактировано ilnur (Фев. 15, 2013 20:14:27)
Офлайн
А если так.
url(r'^categories/(?P<slug1>[^\.]+)/(?P<slug2>[^\.]+)/$', view_2_categories, name='category_2')
def view_2_categories(request, slug1, slug2): categories = Category.objects.filter(slug__in=[slug1,slug2]) return render_to_response('home.html', { 'categories': categories})
@register.assignment_tag def get_2_blog(category): return Blog.objects.filter(category=category).order_by('-timestamp')[:2]
{% for cat in categories %} {% get_2_blog cat as cat_blogs %}{% for blog in cat_blogs %}выводим ньюс {% endfor %} {% endfor %}
def get_2_blog(self): return Blog.objects.filter(category=self).order_by('-timestamp')[:2]
{% for cat in categories %} {% for blog in cat.get_2_blog %}выводим ньюс {% endfor %} {% endfor %}
class Category2View(ListView): template_name = "home.html" def get_queryset(self): return Category.objects.filter(slug__in=[self.kwargs['slug1'],self.kwargs['slug2']])
url(r'^categories/(?P<slug1>[^\.]+)/(?P<slug2>[^\.]+)/$', Category2View.as_view(), name='category_2')
Отредактировано nnmware (Фев. 16, 2013 01:42:25)
Офлайн
Вот первый рабочий вариант:
def view_category(request, slug): category = get_object_or_404(Category, slug=slug) category1=Category.objects.all()[0] category2=Category.objects.all()[1] return render_to_response('home.html', { 'category': category, 'posts': Blog.objects.filter(category=category), 'posts1': Blog.objects.filter(category=category1)[:2], 'posts2': Blog.objects.filter(category=category2)[:2], })
Офлайн
Уродливый код, основанный на многих допущениях: на порядке категорий в queryset'е, на количестве категорий в базе.
Офлайн