### Apache Airflow version

2.1.3 (latest released)

### Operating System

Debian Buster

### Versions of Apache Airflow Providers

_No response_

### Deployment

Managed Services (Astronomer, Composer, MWAA etc.)

### Deployment details

Running `quay.io/astronomer/ap-airflow:2.1.3-buster` Docker image

### What happened

In the task attributes view of a BashOperator, the `template_ext` row doesn't show any value, while I would expect to see `('.sh', '.bash')`.

![image](https://user-images.githubusercontent.com/6249654/131467817-8620f68d-0f3d-491d-ad38-cbf5b91cdcb3.png)


### What you expected to happen

Expect to see correct `template_ext` value

### How to reproduce

Run a BashOperator and browse to Instance Details --> scroll down to `template_ext` row

### Anything else

Spent a little time trying to figure out what could be the reason, but haven't found the problem yet. Therefore created issue to track.

### Are you willing to submit PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

tests/serialization/test_dag_serialization.py
dags = collect_dags(
            [
                "airflow/providers/*/example_dags",
                "airflow/providers/*/*/example_dags",
            ]
        )
        
        for dag in dags.values():
            serialized_dag = SerializedDAG.from_json(SerializedDAG.to_json(dag))
            self.validate_deserialized_dag(serialized_dag, dag)
    @parameterized.expand([(cron_timetable("0 0 * * *"),), (CustomSerializationTimetable("foo"),)])
    def test_dag_roundtrip_from_timetable(self, timetable):
        """Verify a timetable-backed serialization can be deserialized."""
        dag = get_timetable_based_simple_dag(timetable)
        roundtripped = SerializedDAG.from_json(SerializedDAG.to_json(dag))
        self.validate_deserialized_dag(roundtripped, dag)
    def validate_deserialized_dag(self, serialized_dag, dag):