【问题标题】:Django template not rendering correctly on development serverDjango 模板无法在开发服务器上正确呈现
【发布时间】:2011-05-25 01:57:29
【问题描述】:

当使用开发服务器以及视图和模板 html 文件(两者似乎都格式正确)时,Django 的服务器不会像应有的那样将模板中的 html 作为源代码到网页,而是它似乎只是呈现模板,就好像它是我想在页面上显示的东西一样。所以它似乎创建了它自己的 html,我的模板文件是应该打印的文本。例如,这里是在开发服务器上运行时来自网页的视图和模板以及生成的源代码。

查看:

def start(request, ampCode):
t = get_template('code_user.html')
c = Context({'user_code': ampCode})
html = t.render(c)
return HttpResponse(html)

模板:

{% extends "base_code_user.html" %}

{% block title %} This is the title {% endblock %}

{% block body %}

<b> {{user_code}} </b>

{% endblock %}

其他模板扩展的其他模板:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title> {% block title %}  {% endblock %} </title>
</head>

<body>
    {% block body %} {% endblock %}
</body>

</html>

生成的源代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="1038.35">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Courier}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Courier; min-height: 14.0px}
span.Apple-tab-span {white-space:pre}
</style>

</head>
<body>
<p class="p1"><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="1038.35">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Courier}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Courier; min-height: 14.0px}
span.Apple-tab-span {white-space:pre}
</style>

</head>
<body>
<p class="p1">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"</p>
<p class="p1"><span class="Apple-converted-space">  </span>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</p>
<p class="p1">&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;</p>
<p class="p1"><span class="Apple-converted-space">    </span>&lt;head&gt;</p>
<p class="p1"><span class="Apple-tab-span"> </span>&lt;title&gt;  This is the title  &lt;/title&gt;</p>

<p class="p1"><span class="Apple-converted-space">    </span>&lt;/head&gt;</p>
<p class="p2"><br></p>
<p class="p1"><span class="Apple-tab-span"> </span>&lt;body&gt;</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span">    </span></p>
<p class="p2"><br></p>
<p class="p1"><span class="Apple-tab-span"> </span>&lt;b&gt; AAAAAA &lt;/b&gt;</p>

<p class="p2"><br></p>
<p class="p1"></p>
<p class="p1"><span class="Apple-tab-span"> </span>&lt;/body&gt;</p>
<p class="p2"><br></p>
<p class="p1">&lt;/html&gt;</p>
</body>
</html>

也许我只是不了解模板系统的功能并且它可能正常工作,但我的印象是模板中的任何内容都会成为页面的结果源代码。关于可能导致此问题的任何帮助都会有所帮助。谢谢

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    编辑:

    当我在 django 项目中尝试您的确切示例时,它对我有用(相同的视图名称,相同的模板名称)。输出(假设 ampCode 为 3):

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    <title>  This is the title  </title>
    </head>
    
    <body>
    
    
    <b> 3 </b>
    
    
    </body>
    
    </html>
    

    我的猜测是您的问题出在其他地方,并且在您的代码示例中找不到。也许您的 URL conf 指向一个完全不同的视图有问题?

    上一个答案:

    在您看来,将mimetype 添加到您的HttpResponse

    return HttpResponse(html, mimetype='text/html')
    

    如果不是,它将默认解释为text/plain,因此无法正确呈现html。

    如果您想在呈现模板时使内容更短,您可以简单地使用响应快捷方式。看看Django shortcut functions

    【讨论】:

    • 再次阅读您的问题,我可能会误解它。如果这不是您正在寻找的答案,请忽略它。
    • @Torsten 我过去曾尝试过将 mimetype 转换为 text/html,现在我又试了一次,但仍然遇到同样的问题。此外,我一直在使用 render_to_response 函数,但我认为我会尝试“正常”的方式。还有其他建议吗?经过一天多的寻找答案后,我无法弄清楚这一点。
    • 在我看来,您的 {% extends "base_code_user.html" %} 无法正常工作(最终的源代码不包括您的基本模板中的部分)。您确定您在某处没有错字吗(在您的code_user.htmlbase_code_user.html 的名称中)。虽然我想知道它正在使用哪个模板以及为什么它会两次启动整个 html 文档。
    • 查看我的编辑。在尝试您的代码示例时,它对我来说效果很好。即使没有mimetype
    • @Torsten 实际上,模板似乎可以正确“工作”。屏幕上的内容是我希望源代码看起来的样子。有趣的是,我将屏幕上的内容复制并粘贴到一个文件中并保存并尝试用 Firefox 打开它,我想出了相同的源代码以及我不想要的所有额外垃圾。我也用 safari 尝试过,在那里遇到了同样的问题。你认为这可能是我的电脑设置问题吗?
    猜你喜欢
    • 2015-04-01
    • 2015-12-27
    • 2012-06-05
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    相关资源
    最近更新 更多