**Apache Airflow version**: 2.0.0 - 2.1.0

**Kubernetes version**: N/A

**Environment**:

- **Cloud provider or hardware configuration**: Docker on MacOS (but also AWS ECS deployed)
- **OS** (e.g. from /etc/os-release): MacOS Big Sur 11.3.1
- **Kernel** (e.g. `uname -a`): Darwin Kernel Version 20.4.0
- **Install tools**:
- **Others**:

**What happened**:

When a code block is a part of a DAG's `doc_md`, it does not render correctly in the Web UI, but collapses all the lines into one line instead.

**What you expected to happen**:

The multi line code block be rendered with line breaks preserved.

**How to reproduce it**:
Create a DAG with `doc_md` containing a code block:

````python
from airflow import DAG

DOC_MD = """\
# Markdown code block

Inline `code` works well.

```
Code block
does not
respect
newlines
```
"""

dag = DAG(
    dag_id='test',
    doc_md=DOC_MD
)
````

The rendered documentation looks like this:
<img src="https://user-images.githubusercontent.com/11132999/119981579-19a70600-bfbe-11eb-8036-7d981ae1f232.png" width="50%"/>

**Anything else we need to know**: N/A


airflow/www/utils.py
"""Gets 'state' & returns a formatted string with HTML for a given State"""
    state = attr.get('state')
    return state_token(state)
def nobr_f(attr_name):
    """Returns a formatted string with HTML with a Non-breaking Text element"""
    def nobr(attr):
        f = attr.get(attr_name)
        return Markup("<nobr>{}</nobr>").format(f)  
    return nobr
def datetime_f(attr_name):
    """Returns a formatted string with HTML for given DataTime"""
    def dt(attr):  
        f = attr.get(attr_name)
        as_iso = f.isoformat() if f else ''
        if not as_iso:
            return Markup('')
        f = as_iso
        if timezone.utcnow().isoformat()[:4] == f[:4]:
            f = f[5:]
        
        return Markup('<nobr><time title="" datetime="{}">{}</time></nobr>').format(as_iso, f)  
    return dt
def json_f(attr_name):