Django 教程:模板和视图
Posted
技术标签:
【中文标题】Django 教程:模板和视图【英文标题】:Django Tutorial: Templates and Views 【发布时间】:2012-11-13 08:14:04 【问题描述】:我正在完成官方的 Django 教程,我被困在第 3 部分。由于在第 2 部分的最后部分也使用了模板,我将描述我所做的:
第 2 部分告诉我“将模板 admin/base_site.html 从 Django 本身的源代码 (django/contrib/admin/templates) 的默认 Django 管理模板目录中复制到您的任何目录的管理子目录中”在 TEMPLATE_DIRS 中重新使用。”
所以我创建了一个新目录“admin”,该目录具有以下相对路径(请注意,Django 使用目录名称“mysite”,我使用“django_test”:/django_test/polls/templates/admin。我复制了 base_site .html 文件放到这个目录中。
当我在本地浏览器中渲染文件时,它显示:% extends "admin/base.html" % % load i18n % % block title % title | % trans 'Django site admin' %% endblock % % block branding %% trans 'Django administration' %% endblock % % block nav-global %% endblock %
第 3 部分让我在新的子目录 polls/index.html 中创建一个 index.html 文件。但是当我在我的网络浏览器中加载这个文件(使用本地主机服务器)时,我只看到了 html 代码而不是项目符号列表(见下文)。
请注意,我还在我的 settings.py 文件中编辑了 TEMPLATE_DIRS 以告诉 Django 它可以在 /Users/myname/Sites/django_test/django_test/templates 下找到 index.html
下面我将粘贴我的本地服务器呈现的代码(而不是我想要的项目符号列表)。你知道为什么要呈现这段代码,而不是项目符号列表吗?
<html>
<head><title>Test</title></head>
<body>
% if latest_poll_list %
<ul>
% for poll in latest_poll_list %
<li><a href="/polls/ poll.id /"> poll.question </a></li>
% endfor %
</ul>
% else %
<p>No polls are available.</p>
% endif %
</body>
</html>
我不知道我在组织文件方面是否犯了错误。可能有人知道我做错了什么?
【问题讨论】:
您在浏览器中输入的具体地址是什么? 如果您包含了您的 views.py 代码和 urls.py 代码,可能会有用。 我将以下地址放入浏览器:file://localhost/Users/myname/Sites/django_test/django_test/templates/polls/index.html 我的views.py代码是:codepad.org/THXO1wuj,我的urls.py代码是codepad.org/pN8FlOBn 【参考方案1】:正如您在评论中所说,您将文件路径放入浏览器中。然后,您自然会看到模板的文本,因为您完全绕过 Django 并让浏览器从磁盘加载未渲染的模板。
如教程所述,您需要让 Django 通过其正常的 URL 机制提供模板并呈现它。在该部分的前面部分,您前往localhost:8000/admin/
查看管理站点 - 这并没有因为您更换了模板而改变。返回该地址,您将看到更新和渲染的模板。
【讨论】:
谢谢。这很有帮助。现在我仍然收到一个错误:TemplateSyntaxError at /polls/ Could not parse the rest: 'poll.id/">poll.id</a>' from 'poll.id/">poll.id</a>' 你知道为什么会这样吗正在发生吗? 当我将以下内容放入浏览器时,我得到了 TemplateSyntaxError:localhost:8000/polls/.You're 没错,当我添加 /admin/ 时,我得到了管理员视图。我想这就是我应该得到的。谢谢。 您在上面发布的模板不会给出该错误。我怀疑您没有发布您使用的实际代码 - 例如,请注意问题中的版本在a
标签内有poll.question
,但您的错误消息在那里显示poll.id
。请剪切并粘贴模板的确切内容。
嗯,如果“模板”是指 view.py 代码,那么这是我拥有的唯一代码:codepad.org/1bRRqzX6。如果您的意思是我的 index.html 文件中的 html 代码,那么它是
没有可用的民意调查。
% endif % 抱歉,如果我应该重新格式化,请告诉我。但是就像我之前说的,如果我打开localhost:8000/polls,我现在只会收到错误消息。否则,如果我在 8000 和民意调查(即 80000/admin/polls/)之间写 'admin',页面就会呈现。我不确定这是否是本教程要向我展示的内容。【参考方案2】:一旦你掌握了 django 管理网站的窍门,它就会变得很容易。
要采取的步骤是:
-在你的 urls.py 中取消注释 django 管理站点
-通过将 admin 文件夹(在 django 包内)复制到 settings.py 中 STATIC_ROOT 中指定的文件夹中或在 PYTHONPATH 上提供目录,使 css 可用于管理站点
换句话说,您不需要为管理站点创建模板。但是,您需要创建模板来访问您在项目中创建的视图
【讨论】:
以上是关于Django 教程:模板和视图的主要内容,如果未能解决你的问题,请参考以下文章