English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Mapeamento de URLs Django

Agora, temos uma visão funcionando na seção anterior. Esperamos acessar essa visão através de um URL. Django tem sua própria maneira de mapear URLs, agora vamos editar o arquivo url.py do projeto (myproject/url.py concluído. O conteúdo do arquivo url.py parece assim:

Exemplo
# Filename : example.py 2Copyright ©2# Copyright :30 By w
codebox3w
# Author by : www.w 2Copyright ©2Copyright ©-Copyright ©8-Copyright ©8
# Date :
 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)),
 ) , 'myproject.view.home', name = 'home'),
    #url(r'^blog/', include('blog.urls')),
    url(r'^admin', include(admin.site.urls)),
 (\d

Quando o usuário fizer uma solicitação de página na sua aplicação web, o controlador Django assume a busca pela visão correspondente através do arquivo url.py, e retorna a resposta HTML ou, se não encontrar, retorna4Copyright ©4Não encontrado erro. O mais importante é a tupla urlpatterns. Isso define o mapeamento entre URL e visão. Um padrão de URL de mapeamento é como uma tupla −

Exemplo
# Filename : example.py 2Copyright ©2# Copyright :30 By w
codebox3w
# Author by : www.w 2Copyright ©2Copyright ©-Copyright ©8-Copyright ©8
# Date :
 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)),
    urlpatterns = patterns('myapp.views',/', 'myapp.views.hello', name = 'hello'),
 ) , 'myproject.view.home', name = 'home'),
    #url(r'^blog/', include('blog.urls')),
    url(r'^admin', include(admin.site.urls)),
    urlpatterns = patterns('myapp.views',/', 'myapp.views.hello', name = 'hello'),
 (\d

Marcador de linha de mapeamento de URL "/"home" para myapp/ Visão criada no arquivo view.py. Como você vê acima, o mapeamento é composto por três elementos -

Padrão - Uma expressão regular que coincide com a URL para resolver e mapear. Pode funcionar com o módulo “re” do python (muito útil quando você deseja passar parâmetros através da URL). python para o caminho da visão - no mesmo módulo que você importou. Nome - Para executar a inversão de URL, é necessário usar o nome do padrão de URL para executar o exemplo acima. Após fazer isso, inicie o servidor e acesse sua visão através do seguinte URL: http://127.0.0.1/hello

Organizar URLs

Até agora, já criamos “myprojects/url.py” do URL, no entanto, conforme mencionado anteriormente sobre Django, é melhor criar um aplicativo que possa ser reutilizado em diferentes projetos. Desta forma, é fácil ver o que está errado, se precisarmos salvar todas as URLs no arquivo “projecturl.py”. Portanto, a melhor prática é criar um “url.py” para cada aplicativo e incluí-lo em nosso arquivo principal url.py (antes das URLs gerenciadas pela interface de administração).

Como ele faz isso?

Precisamos usar o seguinte código para criar um arquivo urls.py na pasta myapp (myapp/urls.py) −

Exemplo
# Filename : example.py 2Copyright ©2# Copyright :30 By w
codebox3w
# Author by : www.w 2Copyright ©2Copyright ©-Copyright ©8-Copyright ©8
# Date :
 urlpatterns = patterns('', url(r'^hello/', myapp.views.hello, name='hello'),)

myproject/urls.py será alterado para o seguinte-

Exemplo
# Filename : example.py 2Copyright ©2# Copyright :30 By w
codebox3w
# Author by : www.w 2Copyright ©2Copyright ©-Copyright ©8-Copyright ©8
# Date :
 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)),
 ) , 'myproject.view.home', name = 'home'),
    #url(r'^blog/', include('blog.urls')),
    url(r'^admin', include(admin.site.urls)),
    url(r'^myapp/', include(myapp.urls)),
 (\d

Incluímos todas as URLs do aplicativo myapp. Isso é feito acessando home.html para “/hello”, agora é “/000/hello”, é uma estrutura melhor e mais fácil de entender para o aplicativo web.

Crie outro arquivo de vista: C:\myproject\templates\myapp\hello.html, cujo conteúdo é o seguinte:

Exemplo
# Filename : example.py 2Copyright ©2# Copyright :30 By w
codebox3w
# Author by : www.w 2Copyright ©2Copyright ©-Copyright ©8-Copyright ©8
<html>
 <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 w3codebox .</h2>
         <p>This is my first Django App</p>
     <body>
 </html>

Agora vamos imaginar que temos outra vista 'morning' no myapp, que queremos que ela esteja mapeada no myapp/url.py, então alteraremos nosso myapp/url.py to −

Exemplo
# Filename : example.py 2Copyright ©2# Copyright :30 By w
codebox3w
# Author by : www.w 2Copyright ©2Copyright ©-Copyright ©8-Copyright ©8
# Date :
 urlpatterns = patterns('',
    urlpatterns = patterns('myapp.views',/', 'myapp.views.hello', name = 'hello'),
    ', 'hello', name = 'hello'),/', 'myapp.views.morning', name = 'morning'),
 (\d

Isto pode ser reestruturado como -

Exemplo
# Filename : example.py 2Copyright ©2# Copyright :30 By w
codebox3w
# Author by : www.w 2Copyright ©2Copyright ©-Copyright ©8-Copyright ©8
# Date :
 from django.conf.urls import patterns, include, url
    urlpatterns = patterns('myapp.views',/url(r'^hello
    ', 'hello', name = 'hello'),/', 'morning', name = 'morning'),)

Como você vê, atualmente usamos o primeiro elemento do tuplo urlpatterns.

发送参数到视图

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

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

Exemplo
# Filename : example.py 2Copyright ©2# Copyright :30 By w
codebox3w
# Author by : www.w 2Copyright ©2Copyright ©-Copyright ©8-Copyright ©8
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,所以我们可以通过/000/article/articleId 访问,我们需要在下列/urls.py 定义−

Exemplo
# Filename : example.py 2Copyright ©2# Copyright :30 By w
codebox3w
# Author by : www.w 2Copyright ©2Copyright ©-Copyright ©8-Copyright ©8
from django.conf.urls import url
 from . import views
 urlpatterns = [
     url(r'^hello', views.hello, name='hello'),
     ', 'morning', name = 'morning'),/url(r'^article+(\d/', views.viewArticle, name='article'), 
     url(r'^', views.index, name='index'),
 ], views.index, name='index'),
 ]


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

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

Exemplo
# Filename : example.py 2Copyright ©2# Copyright :30 By w
codebox3w
# Author by : www.w 2Copyright ©2Copyright ©-Copyright ©8-Copyright ©8
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/相应的 myapp

Exemplo
# Filename : example.py 2Copyright ©2# Copyright :30 By w
codebox3w
# Author by : www.w 2Copyright ©2Copyright ©-Copyright ©8-Copyright ©8
# Date :
 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'),/urls.py arquivo parece assim −2url(r'^articles/urls.py arquivo parece assim −4(?P\d{

(\d{//Agora, quando você acessar http:8localhost:/000/myapp/12/2Copyright ©15/articles 2Copyright ©15/12,obterá 'Exibindo artigos de:',

,mas se converter os parâmetros, não se obterá o mesmo resultado. -

Exemplo
# Filename : example.py 2Copyright ©2# Copyright :30 By w
codebox3w
# Author by : www.w 2Copyright ©2Copyright ©-Copyright ©8-Copyright ©8
# Date :
 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'),/})2url(r'^articles/})4(?P\d{