LINUX.ORG.RU

Как получить следующий slug в шаблоне Django?

 , ,


0

1

Короче нужно реализовать ссылки на предыдущую и следующую статью.

model.py

from django.db import models
import datetime

class Lesson (models.Model):
    now_time = datetime.datetime.now()
    now_date=datetime.date.today()
    slug = models.SlugField(primary_key=True, max_length=250, unique=True)
    title =models.CharField('Название урока',max_length=50)
    text=models.TextField('Текст урока')
    code=models.TextField('Код')
    date=models.DateField('Дата',default=now_date)
    time=models.TimeField('Время',default=now_time.strftime("%H:%M:%S"))

view.py

class LessonView(DetailView):
    model = Lesson
    template_name = 'tour/lesson.html'
    context_object_name = 'lessons'

    def get_absolute_url(self):
        return reverse('detail', args=[str(self.slug)])

★★★

По какому критерию она считается «следующей»?

В view есть get_context_data(), меняйте её под свои нужды.

lampslave ★★
()

И кстати, вот это неправильно

    now_time = datetime.datetime.now()
    now_date=datetime.date.today()
Достаточно одного поля с полной датой. Из него потом в шаблоне можно будет и дату сделать, и время, и день недели.

lampslave ★★
()
Ответ на: комментарий от lampslave

Так задумано, это сознательно )

AUX ★★★
() автор топика
Ответ на: комментарий от lampslave

Например по дате создания

AUX ★★★
() автор топика
Ответ на: комментарий от AUX

В сильно упрощённом виде это выглядит как-то так:

def get_context_data(self, **kwargs):
    context = super(LessonView, self).get_context_data(**kwargs)
    context['next_lesson'] = Lesson.objects.get(id=(self.id + 1))
    return context

zz вам подсказал более удобный вариант. Если я всё правильно понимаю, с ним это должно выглядеть как-то так:

def get_context_data(self, **kwargs):
    context = super(LessonView, self).get_context_data(**kwargs)
    context['next_lesson'] = self.get_object().get_next_by_date()
    return context

Или даже может быть прямо в шаблоне можно писать что-то вроде

{{ lesson.get_next_by_date.title }}
хотя я не уверен, что это не вызовет ошибку. Да и вообще, лучше так не делать.

lampslave ★★
()
Последнее исправление: lampslave (всего исправлений: 1)
Ответ на: комментарий от AUX

Пользуй. Остальные примеры подразумевают что ты возьмешь next_lesson в своем шаблоне и зарендеришь из него ссылку.

zz ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.