LessonDetailView
не имеет никакой сверхдержавы, он не может предположить, что вы хотите иметь Course
экземпляр в контексте вашего шаблона или какой именно вы хотите. В результате шаблон не может разрешить имя course
и действительно выдает пустую строку.
Хорошая новость заключается в том, что при условии, что ваша Lesson
модель (которую вы забыли опубликовать) имеет ForeignKey на Course
, то есть:
class Lesson(models.Model):
course = models.ForeignKey(Course, ....)
# etc
тогда вы можете получить связанный экземпляр курса из экземпляра lesson
, то есть:
<li class="breadcrumb-item">
{% with course=lesson.course %}
<a href="{{ course.get_absolute_url }}">{{course.title}}</a></li>
{% endwith %}
</li>
EDIT:
Может быть потому, что модель имеет много-много отношений и требует другого решения
Ну да, действительно. И прежде чем углубляться в детали реализации, просто спросите себя, как узнать, какой из связанных курсов следует выбрать, если у вас есть только идентификатор урока? Ответ: вы не можете. IOW, вы должны сделать идентификатор курса частью шаблона url для вида урока:
path('lesson/<int:course_id>/<int:pk>/', LessonDetailView.as_view(), name = 'lesson-detail'),
затем обновите ваше представление так, чтобы оно получало идентификатор курса, извлекало курс из БД и вставляло его в контексте (nb: непроверенный код, поэтому он может не работать из коробки - но у вас есть очень полная документация, чтобы помочь вам):
class LessonDetailView(DetailView):
model = Lesson
template_name = 'courses/lesson-details.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
course = self.object.courses.get(pk=kwargs["course_id"])
context["course"] = course
return context
И, конечно же, сбросьте ваш шаблон до первоначальной версии.
РЕДАКТИРОВАТЬ 2:
Я забыл, что это сломается Lesson.get_absolute_url()
, так как вы зависите от знания текущего курса, что невозможно в этом контексте. Решение состоит в том, чтобы просто удалить этот метод из модели Lesson
(на самом деле Модель не должна ничего знать о URL) и заменить все вызовы на lesson.get_absolute_url()
либо вызовом django.core.urlresolvers.reverse
(в коде Python), либо брат {% url %}
тег шаблона (в шаблонах).