request.GET is a dictionary like object.
initial only works in case of unbound form.
Forms have an attribute named data. This attribute is provided as first positional argument or as a data keyword argument during form initialization.
Bound forms are those in which you provide some data as first argument to the form and unbound form has data attribute set as None.
Here in your initialization of form form=Form(request.GET), you are providing the first positional argument, so data attribute is being set on the form and it becomes a bound form. This happens even if request.GET is an empty dictionary. And since your form becomes a bound form so initial of name field has no effect on it.
So, In you GET request you should either do:
form = Form()
and your initial of name field would be honoured.
Or, if you want to read name from request.GET and if its there then want to use it instead of field's initial then have following in your view.
name = request.GET.get(name)
form_level_initial = {}
if name:
form_level_initial['name'] = name
form = Form(initial=form_level_initial)