django 1.7tutorial 简单应用3

官方文档tutorial 的第三章主要说的是 views.py url.py

在django中网页和内容通过views传递,每一个view由一个简单的python函数表示(或者方法)

写下第一个简单的view

在polls/views.py 里写下

from django.http import HttpResponse


def Index(request):

    return HttpResponse("hello world ! This is my first django site")


然后在 poll/urls.py

from django.conf.urls import  pattern, url

from polls import index

urlpatterns = patterns('',

   url(r'^$', views.index, name='index'),

)


然后在根目录的urls.py里加上

url(r'^polls/', include('pols.urls')) 这里注意了 polls/后边没有美元符号,如果加了第一个测试没有问题,后边的测试polls/views里的内容全部不能显示

python manage.py runserver

测试可以看到我们index 函数返回的那一行


再多加一些视图测试

def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)

def results(request, question_id):
    response = "You're looking at the results of question %s."
    return HttpResponse(response % question_id)

def vote(request, question_id):
    return HttpResponse("You're voting on question %s." % question_id)
from django.conf.urls import patterns, url

 修改 polls/views.py
from polls import views

urlpatterns = patterns('',
    # ex: /polls/
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<question_id>\d+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<question_id>\d+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<question_id>\d+)/vote/$', views.vote, name='vote'),
)

然后在根据我上边的注释测试

大体上看起来框架有了,但是有一个问题,我们数据库的内容一点没有显示

改动我们的index

不要忘了导入我们的polls.models

from polls.models import Question

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    output = ', '.join([p.question_text for p in latest_question_list])
    return HttpResponse(output)
这次我们显示了最新的五个问题


仍然有一个问题,我们这里显示的页面都是硬编码进views.py 里边的,这样每次我们想要修改页面都要修改views

可以用模板系统把页面分理出去,

在polls 目录下创建templates django的会自动在app下的templates下寻找模板,而不用像第二节中所说的修改settings文件

关于组织模板:

我们可以把我们所有的模板放在一起,在一个大的templates目录下,它可以工作的非常好,然而,这个模板属于polls应用,所以不像我们创建的admin模板目录(上一节中)

我们将在后边的tutorial中深入讨论


在templates目录下在创建另一个polls, 并且在这个polls目录下创建一个叫做index.html的文件,换句话说你的模板应该在 polls/templates/polls/index.html

     模板命名空间:

           如果我们有多个应用,并且他们有相同的模板名的时候,django会选择她先找到的,所以我们需要命名空间来保证django找到我们需要的模板

index.html


{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

views.py

from django.shortcuts import render

from polls.models import Question


def index(request):
    latest_question_list = Question.objects.all().order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)

然后解决detail view 问题的投票页面
polls.views 里边加上

from django.http import Http404
from django.shortcuts import render

from polls.models import Question
# ...
def detail(request, question_id):
    try:
        question = Question.objects.get(pk=question_id)
    except Question.DoesNotExist:
        raise Http404
    return render(request, 'polls/detail.html', {'question': question})

如果找不到数据库中找不到这个问题的id 返回一个http404
解决上述问题的一个捷径

from django.shortcuts import get_object_or_404, render

from polls.models import Question
# ...
def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/detail.html', {'question': question})

get_object_or_404()函数需要两个参数,一个django的模型,另一个是一个任意的数字(数据可的keywords),将会传给数据库的get函数,如果对象没有出现,抛出404异常


运用模板系统
回到我们的detail()view 给出了 变量question, 这里是polls/detail.html
<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
    <li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>
模板系统用 点号 来获得 变量的属性,详细参照我对关于template的那篇博客

是时候换掉 html中的硬编码了

index中的
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
换为
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>

templates的命名空间

根目录下的urls.py 改为

urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls', namespace="polls")),
    url(r'^admin/', include(admin.site.urls)),
)

index 中的
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
改为
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Django 3 Web应用开发实战》是一本介绍如何使用Django框架开发Web应用的书籍。本书从基础知识开始,逐步介绍了Django框架的各个方面,包括模型、视图、模板、表单、用户认证、管理后台等。通过实际案例的演示,读者可以学习到如何使用Django框架开发出高质量的Web应用。本书适合有一定Python编程基础的读者阅读。 ### 回答2: Django 3 Web应用开发实战是一本非常实用的书籍,是一本值得购买的好书,对于想要快速入门Django开发的人来说,无疑是一个不错的选择。 本书首先介绍了Django框架的基本概念,包括MVT(Model-View-Template)架构、路由、请求和响应等内容,并通过几个简单的示例让读者快速上手。 接着,本书详细地讲述了Django 3框架的各种特性,包括ORM数据库、模板引擎、静态文件、表单、验证器、分页、表单验证、跨域等,同时还涉及了如何使用Ajax、jQuery等前端技术框架,让读者能够更加深入的理解如何开发一个完整的Django 3 Web应用。 此外,本书还介绍了如何将Django 3应用部署到Apache等服务器上,以及如何使用Docker容器等技术进行部署,让读者不仅能够熟练掌握Django 3的开发技术,还能够将开发的应用部署到实际环境中去。 总之,Django 3 Web应用开发实战是一本非常实用的书籍,对于想要从事Web应用开发的人来说,无疑是一个相当不错的引导书。如果你是一位喜欢动手实践的程式设计师,那么选择这本书将会是你事业的一次正确决策! ### 回答3: django 3 web应用开发实战是一本以python web框架django为基础,介绍如何使用django 3进行web应用开发的实战教程。本书作者是阿普顿(Andrew Pinkham),是一位专业的django开发者,有着丰富的django开发经验。 本书共分为3部分,共12章。第一部分主要介绍django 3的基础知识,包括django框架的概况、模型、视图、模板、表单、用户认证、权限系统等内容。对于初学者来说,这部分的内容比较基础,但是对于已经有一定开发经验的人来说,这部分内容也非常重要,因为其中讲解的很多概念和技术都是后续内容的基础。 第二部分介绍django 3的高级应用,包括ajax、测试、性能优化、安全、缓存、分页、搜索等内容。这部分的内容相对来说,是较为高级的,需要读者具备一定开发经验和实践能力。 第三部分则是项目实战,以一个在线书店为例,深入讲解如何使用django 3进行开发。这个例子涵盖了很多常见的web开发需求,在实现过程中,作者也会提出一些最佳实践和技巧。 总之,django 3 web应用开发实战是一本很实用的django教程,对于想要深入了解django 3的web开发者来说,可以说是一本必读的好书。通过学习这本书,读者不仅可以在技术上得到提高,还能够更好的了解web应用的开发流程和工作方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值