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