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

Mappatura URL di Django

Ora, abbiamo una vista di lavoro spiegata nei capitoli precedenti. Speriamo di accedere a questa vista tramite un URL. Django ha il suo proprio modo di mappatura URL, ora editiamo il file url.py del progetto (myproject/url.py) per completare. Il contenuto del file url.py sembra essere il seguente:

# Nome del file: example.py
# Copyright: 2020 By w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
from django.conf.urls import patterns, include, url
 from django.contrib import admin
 admin.autodiscover()
 urlpatterns = patterns('',
    #Esempi
    #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)),
 )

Quando l'utente invia una richiesta di pagina web nel suo applicativo web, il controller Django prende il controllo per cercare la vista corrispondente tramite il file url.py, quindi restituisce una risposta HTML o un errore 404 Non trovato se non trova nulla. L'importante è la tupla 'urlpatterns'. Questo definisce la mappatura tra URL e vista. Un modello di URL di mappatura assomiglia a una tupla −

# Nome del file: example.py
# Copyright: 2020 By w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
from django.conf.urls import patterns, include, url
 from django.contrib import admin
 admin.autodiscover()
 urlpatterns = patterns('',
    #Esempi
    #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'),
 )    , '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'),
 )

Mappatura delle righe di etichetta che mappano l'URL "/home" alla vista Hello creata nel file myapp/view.py. Come puoi vedere, la mappatura è composta da tre elementi -

Modello - Un'espressione regolare che corrisponde all'URL e lo mappa. Può funzionare con il modulo 're' di python (molto utile quando si desidera passare parametri attraverso l'URL). Percorso python alla vista - Lo stesso del modulo che importi. Nome - Per eseguire la risoluzione degli URL, è necessario utilizzare il nome del modello URL per eseguire l'esempio sopra. Dopo aver fatto questo, avviare il server e accedere alle viste tramite il seguente URL: http://127.0.0.1/hello

Organizzazione delle URL

Fino ad ora, abbiamo creato l'URL del file 'myprojects/url.py', tuttavia, come descritto prima nella spiegazione di Django, è meglio creare un'applicazione che possa essere riutilizzata in diversi progetti. In questo modo, è più facile vedere cosa c'è che non va e se si desidera salvare tutte le URL nel file 'projecturl.py'. Quindi, è meglio creare un file 'url.py' per ogni applicazione e inserirlo nel file 'url.py' del nostro progetto principale (inclusi prima delle URL gestite dall'interfaccia di amministrazione).

Come fa?;

Dobbiamo utilizzare il seguente codice per creare un file urls.py nella cartella myapp (myapp/urls.py) -

# Nome del file: example.py
# Copyright: 2020 By w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('', url(r'^hello/', 'myapp.views.hello', name = 'hello')),

myproject/urls.py diventerà il seguente-

# Nome del file: example.py
# Copyright: 2020 By w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
from django.conf.urls import patterns, include, url
 from django.contrib import admin
 admin.autodiscover()
 urlpatterns = patterns('',
    #Esempi
    #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)),
 )

Abbiamo incluso tutti gli URL dell'applicazione "myapp". Questo è fatto tramite l'accesso a "home.html" per " /hello " che ora è " /myapp/hello " e rappresenta una struttura più buona e più facile da capire dell'applicazione web.

Creare un altro file di vista: C:\myproject\templates\myapp\hello.html, il cui contenuto è il seguente:

# Nome del file: example.py
# Copyright: 2020 By w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
<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>

Immaginiamo ora un altro vista "morning" in "myapp", che vogliamo mappare a "myapp/url.py", quindi cambieremo il nostro "myapp/url.py" a -

# Nome del file: example.py
# Copyright: 2020 By w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
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'),
 )

Questo può essere ricostruito come -

# Nome del file: example.py
# Copyright: 2020 By w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('myapp.views',
    url(r'^hello/', 'hello', name = 'hello'),
    url(r'^morning/', 'morning', name = 'morning'),

Come hai visto, ora usiamo il primo elemento del tuple urlpatterns. È molto utile quando si desidera cambiare il nome dell'applicazione.

Inviare parametri al vista

Ora che sappiamo come mappare gli URL e come organizzarli, vediamo come passare parametri ai visti. Un esempio classico è l'articolo che si desidera visitare a " /articles/article_id "

Passare parametri è completato tramite l'espressione regolare del modello URL. Se abbiamo una vista simile a quella seguente: "myapp/view.py"

# Nome del file: example.py
# Copyright: 2020 By w3codebox
# Autore: it.oldtoolbag.com
# Data: 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)

Vogliamo mapparlo in myapp/urls.py, quindi possiamo accedervi tramite “/myapp/article/articleId”, dobbiamo definire nei seguenti -

# Nome del file: example.py
# Copyright: 2020 By w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
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'),
 ], views.index, name='index'),
 ]


Quando Django vede l'URL: “/myapp/article/42” , passa il parametro '42' alla vista viewArticle, nella pagina del browser, dovresti ottenere il seguente risultato -

Attenzione, l'ordine dei parametri è molto importante. Supponiamo di voler visualizzare l'elenco degli articoli di un mese specifico dell'anno, aggiungiamo una vista viewArticles. Il codice view.py diventa -

# Nome del file: example.py
# Copyright: 2020 By w3codebox
# Autore: it.oldtoolbag.com
# Data: 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)

Il file myapp/urls.py sembra così -

# Nome del file: example.py
# Copyright: 2020 By w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
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'),)

Ora, quando visiti http://localhost:8000/myapp/articles/12/2015/, otterrai 'Visualizzando articoli di: 2015/12', ma se converti i parametri, non otterrai lo stesso risultato.

Per evitare questo, potrebbe accadere che un parametro URL punti a un parametro della vista. Pertanto url.py diventerà -

# Nome del file: example.py
# Copyright: 2020 By w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
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'),)