编写更多视图现在让我们添加一些视图到 def detail(request, poll_id):
return HttpResponse("You're looking at poll %s." % poll_id)
def results(request, poll_id):
return HttpResponse("You're looking at the results of poll %s." % poll_id)
def vote(request, poll_id):
return HttpResponse("You're voting on poll %s." % poll_id)
将新视图按如下所示的 from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns('',
# ex: /polls/
url(r'^$', views.index, name='index'),
# ex: /polls/5/
url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
# ex: /polls/5/results/
url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
# ex: /polls/5/vote/
url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
)
在你的浏览器中访问 http://localhost:8000/polls/34/ 。将运行 当有人访问你的网站页面如 “ /polls/34/ ” 时,Django 会加载
以下是当用户访问 “/polls/34/” 路径时系统中将发生的事:
因为 URL 模式是正则表达式,所以你可以毫无限制地使用它们。但是不要加上 URL 多余的部分如 (r'^polls/latest\.html$', 'polls.views.index'),
真的,不要这样做。这很傻。 在视图中添加些实际的功能每个视图只负责以下两件事中的一件:返回一个 你的视图可以读取数据库记录,或者不用。它可以使用一个模板系统,例如 Django 的 – 或者第三方的 Python 模板系统 – 或不用。它可以生成一个 PDF 文件,输出 XML , 即时创建 ZIP 文件, 你可以使用你想用的任何 Python 库来做你想做的任何事。 而 Django 只要求是一个 因为它很方便,那让我们来使用 Django 自己的数据库 API 吧, 在 教程 第1部分 中提过。修改下 from django.http import HttpResponse
from polls.models import Poll
def index(request):
latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
output = ', '.join([p.question for p in latest_poll_list])
return HttpResponse(output)
在这就有了个问题,页面的设计是硬编码在视图中的。如果你想改变页面的外观,就必须修改这里的 Python 代码。因此,让我们使用 Django 的模板系统创建一个模板给视图用,就使页面设计从 Python 代码中 分离出来了。 首先,在 Django 的 组织模板 我们 能够 在一个大的模板目录下一起共用我们所有的模板,而且它们会运行得很好。 但是,此模板属于 polls 应用,因此与我们在上一个教程中创建的管理模板不同, 我们要把这个模板放在应用的模板目录 ( 在你刚才创建的``templates`` 目录下,另外创建个名为 模板命名空间 现在我们 也许 能够直接把我们的模板放在 将以下代码添加到该模板中: {% 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 %}
现在让我们在 index 视图中使用这个模板: from django.http import HttpResponse
from django.template import Context, loader
from polls.models import Poll
def index(request):
latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
template = loader.get_template('polls/index.html')
context = Context({
'latest_poll_list': latest_poll_list,
})
return HttpResponse(template.render(context))
代码将加载 Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 ) GMT+8, 2025-1-8 14:02 , Processed in 0.016565 second(s), 17 queries . |