欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django url,從一個(gè)頁(yè)面調(diào)到另個(gè)頁(yè)面的方法

 更新時(shí)間:2019年08月21日 09:33:19   作者:NeXTSTEP110  
今天小編就為大家分享一篇Django url,從一個(gè)頁(yè)面調(diào)到另個(gè)頁(yè)面的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

創(chuàng)建項(xiàng)目和應(yīng)用

django-admin startproject zqxt_views(項(xiàng)目名)
cd zqxt_views
python manage.py startapp calc(應(yīng)用名)

————–1.采用/add?a=4&b=5這樣GET方法進(jìn)行—————————

修改 calc/view.py文件

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

def add(request):
 a = request.GET['a']
 b = request.GET['b']
 c = int(a)+int(b)
 return HttpResponse(str(c))

修改 zqxt_views/urls.py 文件,添加一個(gè)網(wǎng)址來(lái)對(duì)應(yīng)我們剛才新建的視圖函數(shù)。

from django.conf.urls import url
from django.contrib import admin
from calc import views as calc_views

urlpatterns = [
 url(r'^add/$', calc_views.add, name='add'), # 注意修改了這一行
 url(r'^admin/', admin.site.urls),
]

打開服務(wù)器并訪問(wèn)

python manage.py runserver 8003

打開網(wǎng)址

http://127.0.0.1:8003/add/?a=4&b=5

————–2.采用/add/3/4這樣的網(wǎng)址的方式—————————

修改 calc/views.py 文件,再定義一個(gè)add2函數(shù)

def add2(request, a, b):
 c = int(a) + int(b)
 return HttpResponse(str(c))

接著修改 zqxt_views/urls.py 文件,再添加一個(gè)新的 url

url(r'^add/(\d+)/(\d+)/$',calc_views.add2,name='add2'),

我們可以看到網(wǎng)址中多了 (\d+), 正則表達(dá)式中 \d 代表一個(gè)數(shù)字,+ 代表一個(gè)或多個(gè)前面的字符,寫在一起 \d+ 就是一個(gè)或多個(gè)數(shù)字,用括號(hào)括起來(lái)的意思是保存為一個(gè)子組,每一個(gè)子組將作為一個(gè)參數(shù),被 views.py 中的對(duì)應(yīng)視圖函數(shù)接收。

我們?cè)僭L問(wèn) http://127.0.0.1:8003/add/4/5/ 就可以看到和剛才同樣的效果,但是這回網(wǎng)址更優(yōu)雅了

打開 zqxt_views/urls.py

from django.conf.urls import url
from django.contrib import admin
from calc import views as calc_views

urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^add/$',calc_views.add,name='add'),
 url(r'^add/(\d+)/(\d+)/$',calc_views.add2,name='add2'),
]

在 url(r'^add/$',calc_views.add,name='add'),中,name='add'是用來(lái)干什么滴啊?

簡(jiǎn)單說(shuō),name可用于在templates,models,views……中得到對(duì)應(yīng)的網(wǎng)址,相當(dāng)于給“網(wǎng)址取了一個(gè)名字”,只要名字不變,網(wǎng)址變了也能通過(guò)名字獲取到。

為了繼續(xù)弄清楚這個(gè)問(wèn)題,我們先建立一個(gè)首頁(yè)的視圖和url

修改 *calc/views.py*

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


def index(request):
 return render(request, 'home.html')

render 是渲染模板

將‘calc'這個(gè)app加入到*zqxt_views/settings.py 中*

INSTALLED_APPS = [
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',

 'calc',
]

這樣,使用render的時(shí)候,Django會(huì)自動(dòng)找到INSTALLED_APPS中列出的各個(gè)app下的templates中的文件。

提示:DEBUG=True的時(shí)候,Django可以自動(dòng)找到各個(gè)app下static文件中的靜態(tài)文件(js,css,圖片,資源)

我們?cè)赾alc這個(gè)app中新建一個(gè)templates文件夾,在templates中新建一個(gè)home.html

文件 calc/templates/home.html 中寫入以下內(nèi)容

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>title</title>
</head>
<body>
 <a href="/add/4/5" rel="external nofollow" >計(jì)算 4 + 5 </a>
</body>
</html>

修改zqxt_views/urls.py

urlpatterns = [
 url(r'^$', calc_views.index, name='home'),
 url(r'^add/$', calc_views.add, name='add'),
 url(r'^add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),
 url(r'^admin/', admin.site.urls),
]

運(yùn)行服務(wù)器python manage.py runserver 8004,訪問(wèn)http://127.0.0.1:8004/

我們計(jì)算加法的時(shí)候用的是 /add/4/5/ ,后來(lái)需求發(fā)生變化,比如改成 /4_add_5/,但在網(wǎng)頁(yè)中,代碼中很多地方都寫死的 /add/4/5/,比如模板中可能是這么寫的

<a href="/add/4/5/" rel="external nofollow" rel="external nofollow" >計(jì)算 4+5</a>

如果這樣寫“死網(wǎng)址”,會(huì)使得在改了網(wǎng)址(正則)后,模板(template),視圖(views.py,比如用于URL跳轉(zhuǎn)),模型(models.py,獲取記錄訪問(wèn)地址等)用了此網(wǎng)址的,都必須進(jìn)行相應(yīng)的更改,修改的代價(jià)很大,一不小心,有的地方?jīng)]改過(guò)來(lái),就不能用了。

reverse 接收 url 中的 name 作為第一個(gè)參數(shù),我們?cè)诖a中就可以通過(guò) reverse() 來(lái)獲取對(duì)應(yīng)的網(wǎng)址

我們?cè)诮K端上輸入:python manage.py shell

>>> from django.core.urlresolvers import reverse # django 1.4.x - django 1.10.x

或者

>>> from django.urls import reverse # Django 1.10.x - Django 2.x 新的,更加規(guī)范了

>>> reverse('add2', args=(4,5))
u'/add/4/5/'
>>> reverse('add2', args=(444,555))
u'/add/444/555/'

在網(wǎng)頁(yè)模板中也是一樣,可以很方便的使用。

不帶參數(shù)的:
{% url 'name' %}
帶參數(shù)的:參數(shù)可以是變量名
{% url 'name' 參數(shù) %}

因此,我們將:templates/home.html 中

<a href="/add/4/5/" rel="external nofollow" rel="external nofollow" >link</a>改成
<a href="{% url 'add2' 4 5 %}" rel="external nofollow" >link</a>

這樣的話,當(dāng) urls.py 進(jìn)行更改,前提是不改 name(這個(gè)參數(shù)設(shè)定好后不要輕易改),獲取的網(wǎng)址也會(huì)動(dòng)態(tài)地跟著變,比如改成:

url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),

{% url ‘a(chǎn)dd2' 4 5 %}就會(huì)被渲染成/new_add/4/5/

有另外一個(gè)情況,如果我們?cè)瓉?lái)收藏的一個(gè)網(wǎng)址,現(xiàn)在這個(gè)網(wǎng)址被廢了,現(xiàn)在有個(gè)新的網(wǎng)址,如何讓以前的/add/3/4自動(dòng)跳轉(zhuǎn)到新的網(wǎng)址那?

具體的思路是,在view.py寫一個(gè)跳轉(zhuǎn)方法:

from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

def old_add2_redirect(request, a, b):
 return HttpResponseRedirect(
 reverse('add2', args=(a, b))
 )

以上這篇Django url,從一個(gè)頁(yè)面調(diào)到另個(gè)頁(yè)面的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 將python2.7添加進(jìn)64位系統(tǒng)的注冊(cè)表方式

    將python2.7添加進(jìn)64位系統(tǒng)的注冊(cè)表方式

    今天小編就為大家分享一篇將python2.7添加進(jìn)64位系統(tǒng)的注冊(cè)表方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Python的Bottle框架中返回靜態(tài)文件和JSON對(duì)象的方法

    Python的Bottle框架中返回靜態(tài)文件和JSON對(duì)象的方法

    這篇文章主要介紹了Python的Bottle框架中返回靜態(tài)文件和JSON對(duì)象的方法,Bottle框架在Python開發(fā)者中具有很高的人氣,需要的朋友可以參考下
    2015-04-04
  • 帶你了解Python妙開根號(hào)的三種方式

    帶你了解Python妙開根號(hào)的三種方式

    這篇文章主要為大家介紹了Python妙開根號(hào)的三種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • Python中函數(shù)的創(chuàng)建與調(diào)用你了解嗎

    Python中函數(shù)的創(chuàng)建與調(diào)用你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Python中函數(shù)的創(chuàng)建與調(diào)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Pandas的MultiIndex多層索引使用說(shuō)明

    Pandas的MultiIndex多層索引使用說(shuō)明

    這篇文章主要介紹了Pandas的MultiIndex多層索引使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • python反扒機(jī)制的5種解決方法

    python反扒機(jī)制的5種解決方法

    這篇文章主要介紹了python反扒機(jī)制的5種解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python腳本框架webpy的url映射詳解

    python腳本框架webpy的url映射詳解

    這篇文章主要為大家介紹了python腳本框架web.py的url映射的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • python 多線程應(yīng)用介紹

    python 多線程應(yīng)用介紹

    python可以方便地支持多線程??梢钥焖賱?chuàng)建線程、互斥鎖、信號(hào)量等等元素,支持線程讀寫同步互斥
    2012-12-12
  • python基于win32api實(shí)現(xiàn)鍵盤輸入

    python基于win32api實(shí)現(xiàn)鍵盤輸入

    這篇文章主要介紹了python基于win32api實(shí)現(xiàn)鍵盤輸入,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python中的命名元組簡(jiǎn)單而強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)示例詳解

    Python中的命名元組簡(jiǎn)單而強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)示例詳解

    namedtuple是Python中一個(gè)非常有用的數(shù)據(jù)結(jié)構(gòu),它提供了一種簡(jiǎn)單的方式創(chuàng)建具有固定字段的輕量級(jí)對(duì)象,通過(guò)使用namedtuple,可以提高代碼的可讀性和可維護(hù)性,避免了使用類定義對(duì)象的復(fù)雜性,這篇文章主要介紹了Python中的命名元組簡(jiǎn)單而強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下
    2024-05-05

最新評(píng)論