summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/conf/global_settings.py3
-rw-r--r--django/middleware/common.py34
2 files changed, 19 insertions, 18 deletions
diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py
index c5e560c9e1..0d9a50148d 100644
--- a/django/conf/global_settings.py
+++ b/django/conf/global_settings.py
@@ -100,6 +100,9 @@ ALLOWED_INCLUDE_ROOTS = ()
# is an admin.
ADMIN_FOR = []
+# Whether to check the flat-pages table as a last resort for all 404 errors.
+USE_FLAT_PAGES = True
+
# 404s that may be ignored.
IGNORABLE_404_STARTS = ('/cgi-bin/', '/_vti_bin', '/_vti_inf')
IGNORABLE_404_ENDS = ('mail.pl', 'mailform.pl', 'mail.cgi', 'mailform.cgi', 'favicon.ico', '.php')
diff --git a/django/middleware/common.py b/django/middleware/common.py
index ee6b68be7e..4abe4ee236 100644
--- a/django/middleware/common.py
+++ b/django/middleware/common.py
@@ -54,29 +54,27 @@ class CommonMiddleware:
return None
def process_response(self, request, response):
- """
- Check for a flatfile (for 404s) and calculate the Etag, if needed.
- """
-
- # If this was a 404, check for a flat file
+ "Check for a flat page (for 404s) and calculate the Etag, if needed."
if response.status_code == 404:
- try:
- response = flat_file(request, request.path)
- except exceptions.Http404:
+ if settings.USE_FLAT_PAGES:
+ try:
+ return flat_file(request, request.path)
+ except exceptions.Http404:
+ pass
+
+ if settings.SEND_BROKEN_LINK_EMAILS:
# If the referrer was from an internal link or a non-search-engine site,
# send a note to the managers.
- if settings.SEND_BROKEN_LINK_EMAILS:
- domain = request.META['HTTP_HOST']
- referer = request.META.get('HTTP_REFERER', None)
- is_internal = referer and (domain in referer)
- path = request.get_full_path()
- if referer and not _is_ignorable_404(path) and (is_internal or '?' not in referer):
- mail_managers("Broken %slink on %s" % ((is_internal and 'INTERNAL ' or ''), domain),
- "Referrer: %s\nRequested URL: %s\n" % (referer, request.get_full_path()))
- # If there's no flatfile we want to return the original 404 response
+ domain = request.META['HTTP_HOST']
+ referer = request.META.get('HTTP_REFERER', None)
+ is_internal = referer and (domain in referer)
+ path = request.get_full_path()
+ if referer and not _is_ignorable_404(path) and (is_internal or '?' not in referer):
+ mail_managers("Broken %slink on %s" % ((is_internal and 'INTERNAL ' or ''), domain),
+ "Referrer: %s\nRequested URL: %s\n" % (referer, request.get_full_path()))
return response
- # Use ETags, if requested
+ # Use ETags, if requested.
if settings.USE_ETAGS:
etag = md5.new(response.get_content_as_string('utf-8')).hexdigest()
if request.META.get('HTTP_IF_NONE_MATCH') == etag: