前端教程:DjangoURL映射

现在,我们有一个工作视图在前面的章节中解释。我们希望通过一个URL来访问该视图。 Django有他自己 URL映射的方式,现在我们来编辑项目中的 url.py 文件(myproject/url.py)完成。url.py 文件内容看起来如下:

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   #Examples
   #url(r'^$', 'myproject.view.home', name = 'home'),
   #url(r'^blog/', include('blog.urls')),

   url(r'^admin', include(admin.site.urls)),
)123456789101112复制代码类型:[html]

当用户在您的网络应用程序发起一个网页的请求,Django控制器会接管通过url.py文件来寻找相应的视图,然后返回HTML响应或如果没有找到则返回404未找到错误。最重要的是“urlpatterns” 元组。这就是定义URL和视图之间的映射。一个映射的URL模式就像一个元组

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   #Examples
   #url(r'^$', 'myproject.view.home', name = 'home'),
   #url(r'^blog/', include('blog.urls')),

   url(r'^admin', include(admin.site.urls)),
   url(r'^hello/', 'myapp.views.hello', name = 'hello'),
) 

1234567891011121314复制代码类型:[html]

标记行映射URL "/home" 到 myapp/ view.py文件中创建的Hello视图。正如你看到上面的映射是由三个要素 -

模式− 一个正则表达式匹配以URL予以解决和映射。 能够与python “re模块工作一切都符合的模式(非常有用在你想通过URL来传递参数时)。

Python到视图的路径−在你导入模块时相同。

名称−为了执行URL反转,需要使用URL模式的命名来执行上面示例。这样做以后,启动服务器,通过以下URL访问您的视图:http://127.0.0.1/hello

整理网址

到目前为止,我们已经创建了“myprojects/url.py”文件的URL,然而,正如前面关于Django说明,创建一个应用程序,最好是能够重复使用在不同的项目中应用。 这样就可以很容易地看到的问题是什么,如果要保存所有网址中在“projecturl.py”文件中。 所以,最好的做法是创建每个应用程序的“url.py”,并把它列入我们的主项目url.py文件(包括在我们的管理界面管理的URL之前)。

它是如何做的呢?

我们需要使用下面的代码来创建一个 urls.py 文件在myapp文件夹中(myapp/urls.py) −

from django.conf.urls import patterns, include, url

urlpatterns = patterns('', url(r'^hello/', 'myapp.views.hello', name = 'hello'),)12345复制代码类型:[html]

myproject/urls.py 将变更为以下-

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   #Examples
   #url(r'^$', 'myproject.view.home', name = 'home'),
   #url(r'^blog/', include('blog.urls')),

   url(r'^admin', include(admin.site.urls)),
   url(r'^myapp/', include(myapp.urls)),
)
12345678910111213复制代码类型:[html]

我们已经包括了 myapp 应用程序的所有URL。这是通过访问 home.html 为 “/hello”,现在是 “/myapp/hello” ,这是Web应用程序的更好和更容易理解的结构。

再创建一个视图文件:C:\myproject\templates\myapp\hello.html,其内容如下:

<html lang="en"><head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>Hello </title>
  <meta name="robots" content="NONE,NOARCHIVE">
  </style></head>
 <body>
  <h2>Welcome to Yiibai .</h2>
  <p>This is my first Django App</p>
 <body></html>1234567891011121314复制代码类型:[html]

现在让我们想象一下在 myapp 的 “morning”的另一个视图,我们希望它在映射myapp/url.py,wewillthenchangeourmyapp/url.pyto

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
   url(r'^hello/', 'myapp.views.hello', name = 'hello'),
   url(r'^morning/', 'myapp.views.morning', name = 'morning'),
) 

12345678复制代码类型:[html]

这可以被重构为 −

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),)
123456复制代码类型:[html]

正如你所看到的,我们现在使用 urlpatterns 元组的第一个元素。当你想改变应用程序的名称时,这非常有用。

发送参数到视图

现在我们知道如何映射URL,如何组织他们,现在就让我们来看看如何将参数传递给视图。一个经典的文章例子(您要访问文章到“/articles/article_id”)。

传递参数是通过URL模式正则表达式捕捉它们完成的。如果我们有类似以下的视图 “myapp/view.py”

from django.shortcuts import render
from django.http import HttpResponse

def hello(request):
   return render(request, "hello.html", {})

def viewArticle(request, articleId):
   text = "Displaying article Number : %s"%articleId
   return HttpResponse(text) 

1234567891011复制代码类型:[html]

我们想把它映射放在myapp/urls.py ,所以我们可以通过 “/myapp/article/articleId” 访问, 我们需要在下列 “myapp/urls.py”定义

from django.conf.urls import url
from . import views
urlpatterns = [
 url(r'^hello', views.hello, name='hello'),
 url(r'^article/(\d+)/', views.viewArticle, name = 'article'),
 url(r'^$', views.index, name='index'),
]123456789复制代码类型:[html]

当Django会看到URL: “/myapp/article/42” ,它将传递参数'42'到viewArticle视图,在浏览器中,应该得到以下结果 -

注意,参数的顺序这里是很重要的。假设我们希望查看一年中某个一个月的文章列表,现在添加一个viewArticles视图。view.py代码变为 -

from django.shortcuts import render
from django.http import HttpResponse

def hello(request):
   return render(request, "hello.html", {})

def viewArticle(request, articleId):
   text = "Displaying article Number : %s"%articleId
   return HttpResponse(text)

def viewArticles(request, month, year):
   text = "Displaying articles of : %s/%s"%(year, month)
   return HttpResponse(text) 

123456789101112131415复制代码类型:[html]

相应的myapp/urls.py 文件看起来如下 −

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),
   url(r'^article/(\d+)/', 'viewArticle', name = 'article'),
   url(r'^articles/(\d{2})/(\d{4})', 'viewArticles', name = 'articles'),)12345678复制代码类型:[html]

现在,当您访问 “http://localhost:8000/myapp/articles/12/2015/”,会得到'Displaying articles of: 2015/12' ,但如果转换参数,将不能得到相同的结果。

为避免这种情况,有可能一个URL参数会链接到视图参数。因此 url.py 将成为 -

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),
   url(r'^article/(\d+)/', 'viewArticle', name = 'article'),
   url(r'^articles/(?P\d{2})/(?P\d{4})', 'viewArticles', name = 'articles'),)
(0)

相关推荐

  • Django Full Coverage(飞速入门)

    Django(个人推荐, 如果项目较大 需要协同开发, 建议使用django这种重量级框架, 如果类似于纯api的后端应用建议使用 flask, 轻量小巧 , 麻雀虽小五脏俱全) 1.Django是什 ...

  • 用 Python 在安卓手机上构建 Web 应用程序

    昨天 嘿,你好吗?我今年 18 岁,是一名后端开发者,我希望成为机器学习工程师.在本文中,我会介绍如何使用 Python 在手机上构建 Web 应用程序.开始吧! 必要条件 要满足的第一个条件是拥有一 ...

  • Django项目02----Django项目的创建和使用 ---- hello world小项目

    Django项目02----Django项目的创建和使用 ---- hello world小项目

  • 前端教程——JavaScript函数中重构If/Else语句的方法

    无论使用何种编程语言,代码都需要根据不同的情况对给定的输入做出不同的决定并执行相应的操作.举例来说,在游戏中,如果玩家的生命值是0,游戏就结束了.在气象应用程序中,如果观看早晨的日出,就会看到一张照片 ...

  • 前端教程:React之Fragments组件语法片段的使用

    React开发中常见的模式之一是将多个元素返回一个组件,Fragments允许您聚合一个子元素列表,并且不会在DOM中添加额外的节点.会Vue的朋友当然会发现,它看起来和Vue的template非常相 ...

  • 前端教程:Django创建视图

    视图功能,或简称"view",是一个简单的Python函数,它接受一个Web请求,并返回一个Web响应.此响应可以是Web页的HTML内容,或重定向,或404错误,或XML文档,或 ...

  • 前端教程:Django模型

    创建模型 下面是创建一个 Dreamreal 模型实例 − from django.db import models class Dreamreal(models.Model): website = ...

  • 前端教程:Django模板系统

    Django能够单独分开Python和HTML,Python代码/变量进入视图和HTML模板. 连接这两个,Django依赖于渲染函数和Django模板语言. 渲染函数 这个函数有三个参数 − 请求− ...

  • 前端教程:Django通用视图

    在某些情况下编写视图代码,正如我们所看到前面工作真的很繁重.想象一下,只需要一个静态页面或列表页. Django还提供了一种简单的方法来设置这些简单的视图被称为通用视图. 不同于传统的视图,一般的视图 ...

  • 前端教程:DjangoApache配置

    到目前为止,在我们的例子中,都是使用 Django 开发的web服务器.但这种服务器只是用于测试和不适合生产环境.一旦程序发布投入生产,就需要如Apache,Nginx等一个真正的服务器,我们在这一节 ...

  • 前端教程:Django上传文件

    对于Web应用程序,以便能够上传文件(资料图片,歌曲,PDF格式,文字......),它通常是很有用的.让我们在这一节中来讨论如何使用Django上传文件. 上传图片 在开始开发图片上传之前,请确保P ...

  • 前端教程:DjangoAjax应用

    Ajax基本上是集成到一起,以减少页负载数量的技术的组合.我们通常使用Ajax来缓解的最终用户体验.在Django使用Ajax可以直接使用Ajax库如jQuery或其它来完成.比方说,想使用jQuer ...