**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


tests/www/test_utils.py
self.check_generate_pages_html(current_page=0, total_pages=6)
    def test_generate_pager_current_middle(self):
        self.check_generate_pages_html(current_page=10, total_pages=20, check_middle=True)
    def test_generate_pager_current_end(self):
        self.check_generate_pages_html(current_page=38, total_pages=39)
    def test_params_no_values(self):
        """Should return an empty string if no params are passed"""
        assert '' == utils.get_params()
    def test_params_search(self):
        assert 'search=bash_' == utils.get_params(search='bash_')
    def test_params_none_and_zero(self):
        query_str = utils.get_params(a=0, b=None, c='true')
        
        pairs = list(sorted(query_str.split('&')))
        assert ['a=0', 'c=true'] == pairs
    def test_params_all(self):