Refs #30400 -- Improved typography in debug and csrf templates.
diff --git a/django/views/csrf.py b/django/views/csrf.py
index 27e7b5ca37718..83377b1832d5c 100644
--- a/django/views/csrf.py
+++ b/django/views/csrf.py
@@ -60,14 +60,14 @@
 
   <p>In general, this can occur when there is a genuine Cross Site Request Forgery, or when
   <a
-  href="https://docs.djangoproject.com/en/{{ docs_version }}/ref/csrf/">Django's
+  href="https://docs.djangoproject.com/en/{{ docs_version }}/ref/csrf/">Django’s
   CSRF mechanism</a> has not been used correctly.  For POST forms, you need to
   ensure:</p>
 
   <ul>
     <li>Your browser is accepting cookies.</li>
 
-    <li>The view function passes a <code>request</code> to the template's <a
+    <li>The view function passes a <code>request</code> to the template’s <a
     href="https://docs.djangoproject.com/en/dev/topics/templates/#django.template.backends.base.Template.render"><code>render</code></a>
     method.</li>
 
@@ -84,7 +84,7 @@
     page with the form, because the token is rotated after a login.</li>
   </ul>
 
-  <p>You're seeing the help section of this page because you have <code>DEBUG =
+  <p>You’re seeing the help section of this page because you have <code>DEBUG =
   True</code> in your Django settings file. Change that to <code>False</code>,
   and only the initial error message will be displayed.  </p>
 
diff --git a/django/views/templates/technical_404.html b/django/views/templates/technical_404.html
index bc0858bba2b8a..694309aa1384e 100644
--- a/django/views/templates/technical_404.html
+++ b/django/views/templates/technical_404.html
@@ -61,7 +61,7 @@ <h1>Page not found <span>(404)</span></h1>
       <p>
         {% if request_path %}
         The current path, <code>{{ request_path }}</code>,{% else %}
-        The empty path{% endif %} didn't match any of these.
+        The empty path{% endif %} didn’t match any of these.
       </p>
     {% else %}
       <p>{{ reason }}</p>
@@ -70,7 +70,7 @@ <h1>Page not found <span>(404)</span></h1>
 
   <div id="explanation">
     <p>
-      You're seeing this error because you have <code>DEBUG = True</code> in
+      You’re seeing this error because you have <code>DEBUG = True</code> in
       your Django settings file. Change that to <code>False</code>, and Django
       will display a standard 404 page.
     </p>
diff --git a/django/views/templates/technical_500.html b/django/views/templates/technical_500.html
index a384c10b9aba6..57d07eb933eeb 100644
--- a/django/views/templates/technical_500.html
+++ b/django/views/templates/technical_500.html
@@ -474,7 +474,7 @@ <h4>Using settings module <code>{{ settings.SETTINGS_MODULE }}</code></h4>
 {% if not is_email %}
   <div id="explanation">
     <p>
-      You're seeing this error because you have <code>DEBUG = True</code> in your
+      You’re seeing this error because you have <code>DEBUG = True</code> in your
       Django settings file. Change that to <code>False</code>, and Django will
       display a standard page generated by the handler for this status code.
     </p>
diff --git a/django/views/templates/technical_500.txt b/django/views/templates/technical_500.txt
index f06a1a499ec15..71a6e150d8899 100644
--- a/django/views/templates/technical_500.txt
+++ b/django/views/templates/technical_500.txt
@@ -59,7 +59,7 @@ Using settings module {{ settings.SETTINGS_MODULE }}{% for k, v in settings.item
 {{ k }} = {{ v|stringformat:"r" }}{% endfor %}
 
 {% if not is_email %}
-You're seeing this error because you have DEBUG = True in your
+You’re seeing this error because you have DEBUG = True in your
 Django settings file. Change that to False, and Django will
 display a standard page generated by the handler for this status code.
 {% endif %}
diff --git a/tests/view_tests/tests/test_debug.py b/tests/view_tests/tests/test_debug.py
index c3ae2cc600125..1276f061fa9e0 100644
--- a/tests/view_tests/tests/test_debug.py
+++ b/tests/view_tests/tests/test_debug.py
@@ -113,13 +113,13 @@ def test_403_template(self):
     def test_404(self):
         response = self.client.get('/raises404/')
         self.assertEqual(response.status_code, 404)
-        self.assertContains(response, "<code>not-in-urls</code>, didn't match", status_code=404)
+        self.assertContains(response, '<code>not-in-urls</code>, didn’t match', status_code=404)
 
     def test_404_not_in_urls(self):
         response = self.client.get('/not-in-urls')
         self.assertNotContains(response, "Raised by:", status_code=404)
         self.assertContains(response, "Django tried these URL patterns", status_code=404)
-        self.assertContains(response, "<code>not-in-urls</code>, didn't match", status_code=404)
+        self.assertContains(response, '<code>not-in-urls</code>, didn’t match', status_code=404)
         # Pattern and view name of a RegexURLPattern appear.
         self.assertContains(response, r"^regex-post/(?P&lt;pk&gt;[0-9]+)/$", status_code=404)
         self.assertContains(response, "[name='regex-post']", status_code=404)
@@ -130,7 +130,7 @@ def test_404_not_in_urls(self):
     @override_settings(ROOT_URLCONF=WithoutEmptyPathUrls)
     def test_404_empty_path_not_in_urls(self):
         response = self.client.get('/')
-        self.assertContains(response, "The empty path didn't match any of these.", status_code=404)
+        self.assertContains(response, 'The empty path didn’t match any of these.', status_code=404)
 
     def test_technical_404(self):
         response = self.client.get('/technical404/')

https://code.djangoproject.com/ticket/30400