diff --git a/djblets/util/html.py b/djblets/util/html.py
new file mode 100644
index 0000000000000000000000000000000000000000..f522fa27519a06de2729ebaa8aa2161beb374498
--- /dev/null
+++ b/djblets/util/html.py
@@ -0,0 +1,22 @@
+"""HTML-related utilities."""
+
+from __future__ import unicode_literals
+
+from django.utils import six
+from django.utils.functional import lazy
+from django.utils.safestring import mark_safe
+
+
+#: Lazily mark text as safe.
+#:
+#: This is useful if you need a lazily-translated string (such as with
+#: :py:func:`~django.utils.translation.ugettext_lazy`) to be marked safe.
+#:
+#: Args:
+#:     text (six.text_type):
+#:         The text to mark safe.
+#:
+#: Returns:
+#:     django.utils.functional.Promise:
+#:     A promise representing the safe text.
+mark_safe_lazy = lazy(mark_safe, six.text_type)
diff --git a/docs/djblets/coderef/index.rst b/docs/djblets/coderef/index.rst
index a76fd5d8eca861dd5c71b535922cf9fc9a10834c..d720e1a66c6a9f4db00539769873328b7b605aec 100644
--- a/docs/djblets/coderef/index.rst
+++ b/docs/djblets/coderef/index.rst
@@ -358,6 +358,7 @@ Generic Utilities
    djblets.util.dates
    djblets.util.decorators
    djblets.util.filesystem
+   djblets.util.html
    djblets.util.http
    djblets.util.humanize
    djblets.util.json_utils
