Унаследованный шаблон Django, приводящий к искажению HTML - PullRequest
0 голосов
/ 25 сентября 2011

Я использую django 1.3 и Python 2.6.У меня проблема с унаследованными шаблонами, которые неправильно отображаются в браузере.Я тестировал с Win32 Chrome, Firefox и IE8.Вывод выглядит отлично, когда я использую curl, и, конечно, он хорошо сформирован в моем текстовом редакторе, но когда он интерпретируется браузером, это происходит (см. Изображение).

Я почти уверен, что он имеетчтобы сделать с двойной последовательностью Unicode в верхней части файла, но я вырываю свои волосы, пытаясь избавиться от этого!Что может быть причиной этого?

malformed html

base.html:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8" />
  <title>site {% block title %}test_title{% endblock%}</title>
</head>
<body>
  <div id="header">{% block header %}test_header{% endblock %}</div>
  <div id="content">{% block content %}test_content{% endblock %}</div>
  <div id="footer">{% block footer %}test_footer{% endblock %}</div>
</body>
</html>

hexdump -C base.html

00000000  ef bb bf 3c 21 44 4f 43  54 59 50 45 20 48 54 4d  |...<!DOCTYPE HTM|

http://localhost/base/

<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8" />
  <title>site test_title</title>
</head>
<body>
  <div id="header">test_header</div>
  <div id="content">test_content</div>
  <div id="footer">test_footer</div>
</body>
</html>

home.html:

{% extends "base.html" %}
{% block title %}Title{% endblock %}
{% block header %}Header{% endblock %}
{% block content %}Content{% endblock %}
{% block footer %}Footer{% endblock %}

hexdump -C home.html

00000000  ef bb bf 7b 25 20 65 78  74 65 6e 64 73 20 22 62  |...{% extends "b|

http://localhost/home/ (с завитком)

<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8" />
  <title>clog Title</title>
</head>
<body>
  <div id="header">Header</div>
  <div id="content">Content</div>
  <div id="footer">Footer</div>
</body>
</html>

url.py:

urlpatterns = patterns('',
    (r'^home/','site.views.web_home'),
    (r'^base/','site.views.web_base'),
)

views.py:

def web_home(request):
    return render_to_response('home.html')
def web_base(request):
    return render_to_response('base.html')

settings.py: (только потенциально релевантные настройки)

LANGUAGE_CODE = 'en-us'
DEFAULT_CONTENT_TYPE = 'text/html'
DEFAULT_CHARSET='utf-8'
FILE_CHARSET='utf-8'
USE_I18N = True
USE_L10N = True
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
)
...