**Apache Airflow version**: 1.10.14

**Environment**:

- **Cloud provider or hardware configuration**: docker
- **OS** (e.g. from /etc/os-release): apache/airflow:1.10.14-python3.8
- **Kernel** (e.g. `uname -a`): Linux host 5.4.0-62-generic #70-Ubuntu SMP Tue Jan 12 12:45:47 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
- **Install tools**: Docker version 19.03.8, build afacb8b7f0
- **Others**:

**What happened**:
I created a DAG and set the doc_md property on the object but it isn't being rendered in the UI.

**What you expected to happen**:
I expected the markdown to be rendered in the UI

**How to reproduce it**:
Created a new container using the `airflow:1.10.14`, I have tried the following images with the same results.

-  airflow:1.10.14:image-python3.8
-  airflow:1.10.14:image-python3.7
-  airflow:1.10.12:image-python3.7
-  airflow:1.10.12:image-python3.7

```
dag_docs = """
## Pipeline

#### Purpose
This is a pipeline
"""

dag = DAG(
    'etl-get_from_api',
    default_args=default_args,
    description='A simple dag',
    schedule_interval=timedelta(days=1),
)
dag.doc_md = dag_docs

```

![image](https://user-images.githubusercontent.com/29732449/105004686-6b77d680-5a88-11eb-9e34-c8dd38b3fd10.png)

![image](https://user-images.githubusercontent.com/29732449/105004748-7af71f80-5a88-11eb-811c-11bc6a351c71.png)

I have also tried with using a doc-string to populate the doc_md as well as adding some text within the constructor.

```
dag = DAG(
    'etl-get_from_api',
    default_args=default_args,
    description='A simple dag',
    schedule_interval=timedelta(days=1),
    doc_md = "some text"
)
```
All of the different permutations I've tried seem to have the same result. The only thing I can change is the description, that appears to show up correctly.

**Anything else we need to know**:
I have tried multiple browsers (Firefox and Chrome) and I have also done an inspect on from both the graph view and the tree view from within the dag but I can't find any of the text within the page at all.

tests/serialization/test_dag_serialization.py
nested1=ClassWithCustomAttributes(
                        att1="{{ task.task_id }}", att2="{{ task.task_id }}", template_fields=["att1"]
                    ),
                    nested2=ClassWithCustomAttributes(
                        att3="{{ task.task_id }}", att4="{{ task.task_id }}", template_fields=["att3"]
                    ),
                    template_fields=["nested1"],
                ),
                "ClassWithCustomAttributes("
                "{'nested1': ClassWithCustomAttributes({'att1': '{{ task.task_id }}', "
                "'att2': '{{ task.task_id }}', 'template_fields': ['att1']}), "
                "'nested2': ClassWithCustomAttributes({'att3': '{{ task.task_id }}', 'att4': "
                "'{{ task.task_id }}', 'template_fields': ['att3']}), 'template_fields': ['nested1']})",
            ),
        ]
    )
    def test_templated_fields_exist_in_serialized_dag(self, templated_field, expected_field):
        """
        Test that templated_fields exists for all Operators in Serialized DAG
        Since we don't want to inflate arbitrary python objects (it poses a RCE/security risk etc.)
        we want check that non-"basic" objects are turned in to strings after deserializing.
        """
        dag = DAG("test_serialized_template_fields", start_date=datetime(2019, 8, 1))
        with dag:
            BashOperator(task_id="test", bash_command=templated_field)
        serialized_dag = SerializedDAG.to_dict(dag)
        deserialized_dag = SerializedDAG.from_dict(serialized_dag)
        deserialized_test_task = deserialized_dag.task_dict["test"]
        assert expected_field == getattr(deserialized_test_task, "bash_command")
    def test_dag_serialized_fields_with_schema(self):