Opened 3 years ago

Closed 15 months ago

#23908 closed Bug (wontfix)

settings.DEFAULT_CONTENT_TYPE = "application/xhtml+xml" breaks admin site

Reported by: Brian May Owned by: Anton Samarchyan
Component: contrib.admin Version: master
Severity: Normal Keywords:
Cc: cmawebsite@… Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description

By declaring:

DEFAULT_CONTENT_TYPE = "application/xhtml+xml"

The admin site no longer renders correctly.

I think the problem is that we haven't declared the XML namespace correctly, e.g.:

<html xmlns="http://www.w3.org/1999/xhtml">

There are also some other trivial problems, e.g. &rsaquo; no longer works (used in breadcrumbs).

Thanks

Change History (15)

comment:1 Changed 3 years ago by Tim Graham

Resolution: duplicate
Status: newclosed

The admin isn't designed to work as XHTML, see #19363.

comment:2 Changed 3 years ago by Brian May

My understanding is that XHTML is still a current standard, even with HTML5.

See http://www.w3.org/TR/html5/, note the title "A vocabulary and associated APIs for HTML and XHTML". This was published last month.

As such, the response in #19363 implying that HTML5 replaces XHTML is nonsense.

Also it possible to add something like the following in the <head> section to force use of HTML, even when XHTML is the default:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

I feel that something like Django should really keep up with the modern standards.

comment:3 Changed 3 years ago by Josh Smeaton

I didn't get the implication that "HTML5 replaces XHTML" from the linked ticket. Just that Django has chosen to support HTML5 rather than XHTML [N].

From your link: http://www.w3.org/TR/html5/introduction.html#html-vs-xhtml

The first such concrete syntax is the HTML syntax. This is the format suggested for most authors. ... This specification defines version 5.0 of the HTML syntax, known as "HTML 5".
The second concrete syntax is the XHTML syntax, which is an application of XML. ... This specification defines version 5.0 of the XHTML syntax, known as "XHTML 5".
The DOM, the HTML syntax, and the XHTML syntax cannot all represent the same content.

My understanding is that authors should *choose* which to support. The authors of the Admin have chosen HTML 5. You are free to choose XHTML 5 for your own templates.

HTML 5 is a modern standard. There is no requirement (demonstrated) to support multiple, competing standards though.

Is there a particular reason that you feel Django should support XHTML 5 in the admin?

Last edited 3 years ago by Josh Smeaton (previous) (diff)

comment:4 Changed 3 years ago by Brian May

Django Admin doesn't need to support XHTML, however it should be possible to use it with applications that do use XHTML.

As it is, it is not possible for applications to support both XHTML 5 and use Django Admin, because the DEFAULT_CONTENT_TYPE setting is global across all of Django. So you either have to use HTML or turn off Django Admin.

Not to mention XHTML being superior because parsing errors are flagged immediately rather then being ignored.

The meta setting I previously gave would allow Django admin to work as HTML even if the DEFAULT_CONTENT_TYPE setting has been changed, although it could perhaps be argued this is a bit of a kludge, as it overrides the HTTP headers.

comment:5 Changed 3 years ago by Josh Smeaton

In that case, would it maybe make sense to manually specify the mime/content type of all the admins HttpResponse objects? Would that avoid the problem you're seeing?

comment:6 Changed 3 years ago by Brian May

Yes, I believe that would be satisfactory.

I just looked at the code to try and get a vague idea of how this could be done, looks like TemplateResponse instances would need changing in django/contrib/admin/options.py - if my quick glance is sufficient.

comment:7 Changed 3 years ago by Josh Smeaton

Triage Stage: UnreviewedAccepted

Reopening on the basis that the admin site breaks when the following option is set: DEFAULT_CONTENT_TYPE = "application/xhtml+xml"

Since admin supports HTML 5 only - it should take measures to ensure the appropriate headers are sent when the default is not applicable.

comment:8 Changed 3 years ago by Josh Smeaton

Resolution: duplicate
Status: closednew

comment:9 Changed 3 years ago by Collin Anderson

Cc: cmawebsite@… added

I'm personally not a huge fan of having every admin view manually specify the content type. Some crazy alternatives:

  1. Recommend against DEFAULT_CONTENT_TYPE as it's a magic global setting. The admin might be one example of a bigger issue.
  2. Make the admin XHTML compatible despite what we said earlier. https://github.com/django/django/pull/3824

comment:10 Changed 16 months ago by Anton Samarchyan

Owner: changed from nobody to Anton Samarchyan
Status: newassigned

comment:11 Changed 16 months ago by Anton Samarchyan

Has patch: set
Version: 1.7master

Added PR

comment:12 Changed 16 months ago by Tim Graham

Patch needs improvement: set

I wrote to django-developers to try to get a consensus of whether or not we should make that change.

comment:13 Changed 15 months ago by Tim Graham

The consensus on the mailing list is toward deprecating the DEFAULT_CONTENT_TYPE setting. Do you have a use case that argues against that which you could add to the discussion, Brian?

comment:14 Changed 15 months ago by Brian May

I hadn't realised that the XHTML standards are basically dead (and doesn't appear to be supported in HTML5), in which case [deprecating settings.DEFAULT_CONTENT_TYPE] probably makes sense.

Last edited 15 months ago by Tim Graham (previous) (diff)

comment:15 Changed 15 months ago by Tim Graham

Resolution: wontfix
Status: assignedclosed
Summary: XHTML breaks admin sitesettings.DEFAULT_CONTENT_TYPE = "application/xhtml+xml" breaks admin site

Thanks for replying. #27829 will deprecate settings.DEFAULT_CONTENT_TYPE.

Note: See TracTickets for help on using tickets.
Back to Top