<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def start_semester_view(request):
 """ Initiates a semester"s worth of workshift, with the option to copy workshift types from the previous semester. """

    page_name = "Start Semester"
    year, season = utils.get_year_season()
    start_date, end_date = utils.get_semester_start_end(year, season)

    semester_form = SemesterForm(
        data=request.POST or None,
        initial={
            "year": year,
            "season": season,
            "start_date": start_date.strftime(date_formats[0]),
            "end_date": end_date.strftime(date_formats[0]),
        },
        prefix="semester",
    )

    pool_forms = []
    try:
        prev_semester = Semester.objects.latest("end_date")
    except Semester.DoesNotExist:
        pass
    else:
        pools = WorkshiftPool.objects.filter(
            semester=prev_semester,
            is_primary=False,
        )
        for pool in pools:
            form = StartPoolForm(
                data=request.POST or None,
                initial={
                    "title": pool.title,
                    "hours": pool.hours,
                },
                prefix="pool-{}".format(pool.pk),
            )
            pool_forms.append(form)

    if semester_form.is_valid() and all(i.is_valid() for i in pool_forms):
        # And save this semester
        semester = semester_form.save()
        for pool_form in pool_forms:
            pool_form.save(semester=semester)
        return HttpResponseRedirect(wurl("workshift:manage",
                                         sem_url=semester.sem_url))

    return render_to_response("start_semester.html", {
        "page_name": page_name,
        "semester_form": semester_form,
        "pool_forms": pool_forms,
    }, context_instance=RequestContext(request))