django url映射 -九游会下载

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

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
from django.conf.urls import patterns, include, url
 from django.contrib import admin
 admin.autodiscover()
 urlpatterns = patterns('',
    #examples
    #url(/uploads/image/bdjango/r'^,-nbsp;'myproject.view.home',-nbsp;name-nbsp;=-nbsp;'home'),
    #url(/uploads/image/bdr'^blog/',-nbsp;include('blog.urls')),
    url(/uploads/image/bdjango/r'^admin',-nbsp;include(admin.site.urls)),
 )  , 'myproject.view.home', name = 'home'),
    #url(/uploads/image/bdr'^blog/',-nbsp;include('blog.urls')),
    url(/uploads/image/bdjango/r'^admin',-nbsp;include(admin.site.urls)),
 )

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

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
from django.conf.urls import patterns, include, url
 from django.contrib import admin
 admin.autodiscover()
 urlpatterns = patterns('',
    #examples
    #url(/uploads/image/bdjango/r'^,-nbsp;'myproject.view.home',-nbsp;name-nbsp;=-nbsp;'home'),
    #url(/uploads/image/bdr'^blog/',-nbsp;include('blog.urls')),
    url(/uploads/image/bdjango/r'^admin',-nbsp;include(admin.site.urls)),
    url(/uploads/image/bdr'^hello/',-nbsp;'myapp.views.hello',-nbsp;name-nbsp;=-nbsp;'hello'),
 )  , 'myproject.view.home', name = 'home'),
    #url(/uploads/image/bdr'^blog/',-nbsp;include('blog.urls')),
    url(/uploads/image/bdjango/r'^admin',-nbsp;include(admin.site.urls)),
    url(/uploads/image/bdr'^hello/',-nbsp;'myapp.views.hello',-nbsp;name-nbsp;=-nbsp;'hello'),
 )

标记行映射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) −

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('', url(/uploads/image/bdr'^hello/',-nbsp;'myapp.views.hello',-nbsp;name-nbsp;=-nbsp;'hello'),)

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

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
from django.conf.urls import patterns, include, url
 from django.contrib import admin
 admin.autodiscover()
 urlpatterns = patterns('',
    #examples
    #url(/uploads/image/bdjango/r'^,-nbsp;'myproject.view.home',-nbsp;name-nbsp;=-nbsp;'home'),
    #url(/uploads/image/bdr'^blog/',-nbsp;include('blog.urls')),
    url(/uploads/image/bdjango/r'^admin',-nbsp;include(admin.site.urls)),
    url(/uploads/image/bdr'^myapp/',-nbsp;include(myapp.urls)),
 )  , 'myproject.view.home', name = 'home'),
    #url(/uploads/image/bdr'^blog/',-nbsp;include('blog.urls')),
    url(/uploads/image/bdjango/r'^admin',-nbsp;include(admin.site.urls)),
    url(/uploads/image/bdr'^myapp/',-nbsp;include(myapp.urls)),
 )

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

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

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
 
   
   hello 
   
   
 
     
         

welcome to nhooo .

         

this is my first django app

       

现在让我们想象一下在 myapp 的 “morning” 的另一个视图,我们希望它在映射myapp/url.py,we will then change our myapp/url.py to −

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('',
    url(/uploads/image/bdr'^hello/',-nbsp;'myapp.views.hello',-nbsp;name-nbsp;=-nbsp;'hello'),
    url(/uploads/image/bdr'^morning/',-nbsp;'myapp.views.morning',-nbsp;name-nbsp;=-nbsp;'morning'),
 )

这可以被重构为 −

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('myapp.views',
    ,
    ,)

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

urlpatterns 元组的第一个元素

发送参数到视图

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

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

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
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)

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

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
from django.conf.urls import url
 from . import views
 urlpatterns = [
     url(/uploads/image/bdjango/r'^hello',-nbsp;views.hello,-nbsp;name='hello'),
     /', views.viewarticle, name = 'article'), 
     url(/uploads/image/bdjango/r'^,-nbsp;views.index,-nbsp;name='index'),
 ] , views.index, name='index'),
 ]


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

viewarticle视图

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

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
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)

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

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('myapp.views',
    ,
    ,
    /', 'viewarticle', name = 'article'),
    /(\d{4})', 'viewarticles', name = 'articles'),)

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

网页显示

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

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('myapp.views',
    ,
    ,
    /', 'viewarticle', name = 'article'),
    /(?p\d{4})', 'viewarticles', name = 'articles'),)
网站地图